我使用libpng的C,我是新的图像处理。
我使用png_get_IHDR()来获取宽度、高度、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值?有人能帮忙吗?谢谢!
发布于 2014-03-05 14:36:39
如果您不想担心由于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位。
https://stackoverflow.com/questions/22185800
复制相似问题