我需要使用libpng读取C ++中的16位png图像。
我的代码适用于8位,但是找不到解决方案使其适用于16位PNG。
用于读取8位代码的代码段基本上看起来像这样(从here中采用):
png_byte color_type;
png_byte bit_depth;
png_bytep *row_pointers;
int rowbytes = png_get_rowbytes(png_ptr, info_ptr);
row_pointers = (png_bytep*)malloc(sizeof(png_bytep) * height);
for (int y = 0; y<height; y++)
row_pointers[y] = (png_byte*)malloc(png_get_rowbytes(png_ptr, info_ptr));
png_read_image(png_ptr, row_pointers);
如果我使用该代码,则会错误地读取16位图像。我认为发生这种情况是因为png_bytep
仅包含8位值。
因此,我尝试通过将png_uint_16
替换为png_bytep
来将行指针声明为png_uint16p
。上面的代码片段如下所示:
png_byte color_type;
png_byte bit_depth;
png_uint_16p *row_pointers;
int rowbytes = png_get_rowbytes(png_ptr, info_ptr);
row_pointers = (png_uint_16p*)malloc(sizeof(png_uint_16p) * height);
for (int y = 0; y<height; y++)
row_pointers[y] = (png_uint_16*)malloc(png_get_rowbytes(png_ptr, info_ptr));
png_read_image(png_ptr, row_pointers);
但是,问题是函数png_read_image
需要一个png_bytep
作为输入,据我所知,这仅是8位。但是真的没有办法用libpng读取16位图像吗?