LibPNG读取16-bit-integer的PNG时,我发现257个像素的图片,被png_get_rowbytes(png, info)扫出来了514个数据(正好为像素数量2倍),并且此时的数据读出来的也是乱码。

颜色用0~255表示即可,这种情况也许就是8位图。

所以根据猜测,将数据梳理中的x和x+1进行拼接,转换成16 bit integer,然后再转换成32位的int。结果果然正确了。

uint16_t red = (row_pointers[y][2 * x] << 8) | row_pointers[y][2 * x + 1]; // R channel value
int value = static_cast<float>(red) / 65535.0f);