【问题标题】:Why are spots left when converting an RGBA image to RGB?为什么将 RGBA 图像转换为 RGB 时会留下斑点?
【发布时间】:2012-12-02 01:51:12
【问题描述】:

我使用 libpng 将 png (RGBA) 转换为 jpeg (RGB) 来解码 png 文件并应用 png_set_strip_alpha 来忽略 alpha 通道。但是转换后的输出图像有很多斑点。我认为原因是原始图像具有 alpha 为 0 的区域,无论其 RGB 值如何,它都会隐藏像素。当我剥离 alpha(即设置 alpha = 1)时,像素显示。所以我认为只使用 png_set_strip_alpha 不是正确的解决方案。我应该自己写一个方法,还是已经有办法在 libpng 中实现?

【问题讨论】:

    标签: libpng


    【解决方案1】:

    没有办法。如果您放弃 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;
    }
    

    【讨论】:

      猜你喜欢
      • 2021-12-17
      • 1970-01-01
      • 2012-04-11
      • 1970-01-01
      • 2011-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多