libpng,c代码,如何将RGB值转换为像素值?

时间:2014-03-05 00:00:04

标签: c rgb pixel depth libpng

我正在使用libpng for C,我是图像处理新手。

我使用png_get_IHDR()来获取width,height,color_type和bit_depth,我得到的图像值是:

color_type = 6 (PNG_COLOR_TYPE_RGB_ALPHA)
bit_depth = 8
width = 1850
height = 2048

I use png_get_channels() to get the channels which is 4
I use png_get_rowbytes() to get the bytes per row which is 7400 (1850*4)
I use png_read_image() to get all the image data

我的目标是将RGB值转换为像素值,这就是全部!我知道每个像素的R,G,B和Alpha值在图像数据缓冲区中有序存储,似乎不同的bit_depth的转换方法不同。我也可以忽略Alpha值,只在转换时使用R,G,B值吗?有人可以帮忙吗?谢谢!

1 个答案:

答案 0 :(得分:1)

如果您不想担心由于color_type和bit_depth造成的差异, 并且总是想忽略alpha通道,使用

png_set_expand(png_ptr);
png_set_strip_16(png_ptr);
if (color_type & PNG_COLOR_MASK_ALPHA)
   png_set_strip_alpha(png_ptr);

然后你的行将始终包含8位R,G,B,R,G,B ......样本, 每个像素一组三个字节,每行“宽度”组。

如果您使用libpng-1.5.6或更高版本构建,则可以使用 “png_set_scale_16(png_ptr)”而不是;它可以缩放16位样本 更准确地降低到8位。