我正在使用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值吗?有人可以帮忙吗?谢谢!
答案 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位。