【问题标题】:How do I know if an image is "Premultiplied Alpha"?我如何知道图像是否为“预乘 Alpha”?
【发布时间】:2012-02-27 05:04:30
【问题描述】:

听说在进行图层混合等时只需要预乘 alpha。我如何知道我的原始图像是否是预乘 alpha?

【问题讨论】:

    标签: image opengl image-processing opencv png


    【解决方案1】:

    你不能。

    您唯一可以检查的是它是否没有预乘。为此,请检查所有像素并查看是否存在比 alpha 允许的值更高的颜色值if(max(col.r,col.g,col.b) > 255*alpha)//not premul。任何其他情况都是模棱两可的,可以或不可以预乘。您最好的猜测可能是假设它们不是大多数 PNG 的情况。

    编辑:实际上,甚至我发布的代码都不起作用,因为那里有很多带有白色哑光的 PNG,所以图像必须包含具有0 的 alpha 的部分才能确定哑光颜色首先。

    【讨论】:

    • 其实所有个PNG都没有预乘。来源:第 12.8 节,w3.org/TR/PNG-Rationale.html
    • @MarkRansom 不幸的是,并非所有工具都符合此规范。
    • @clamp 那么这些工具在生成 PNG 输出时会出现错误。规范规定 PNG 文件必须具有预乘 alpha。
    • 所有带有由 Xcode 创建并包含在 iOS 应用程序中的 alpha 通道的 PNG 图像都使用预乘像素值。
    • @MarkRansom:你错了。 80808000 是预乘 RGBA 中一个有效且有意义的值,它代表一个加法像素,这就是说预乘比直乘更通用的意义所在。在 PNG 中使用此类约定的软件通常在内部按照约定执行,没有人说此类 PNG 必须是可互操作的,因此您不会看到规范。尽管他们中的一些人可能会编写一些专有的元数据块来表示这一点。
    【解决方案2】:

    Android Bitmap 存储从 PNG 加载的带有预乘 alpha 的图像。您无法以通常的方式从中获得非预乘的原始颜色。

    为了在没有预乘 RGB 通道的情况下加载图像,我必须使用第 3 方 PNGDecoder 从这里:http://twl.l33tlabs.org/#downloads

    【讨论】:

      猜你喜欢
      • 2018-03-30
      • 1970-01-01
      • 1970-01-01
      • 2011-06-30
      • 2016-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多