使用libpng读取16位PNG

时间:2018-07-12 15:39:48

标签: c++ libpng 16-bit

我需要使用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位图像吗?

0 个答案:

没有答案