我使用libpng将png(RGBA)转换为jpeg(RGB)以解码png文件并应用png_set_strip_alpha来忽略alpha通道。但转换后输出图像有很多斑点。我认为原因是原始图像具有alpha为0的区域,无论RGB值如何都隐藏像素。当我剥离alpha(即设置alpha = 1)时,像素显示。所以我认为使用png_set_strip_alpha不是正确的解决方案。我应该自己写一个方法,还是已经有办法在libpng中实现这个?
答案 0 :(得分:2)
没有办法解决这个问题。如果你删除alpha通道,libpng将为你提供原始的RGB通道,这将“揭开”之前看不见的颜色。
您应该加载RGBA图像并自己将其转换为RGB。最简单的方法是将RGB值乘以alpha。
这会将RGBA位图原位转换为RGB:
for(int i=0; i < width*height; i++) {
int r = bitmap[i*4+0],
g = bitmap[i*4+1],
b = bitmap[i*4+2],
a = bitmap[i*4+3];
bitmap[i*3+0] = r * a / 255;
bitmap[i*3+1] = g * a / 255;
bitmap[i*3+2] = b * a / 255;
}