【发布时间】:2012-02-27 05:04:30
【问题描述】:
听说在进行图层混合等时只需要预乘 alpha。我如何知道我的原始图像是否是预乘 alpha?
【问题讨论】:
标签: image opengl image-processing opencv png
听说在进行图层混合等时只需要预乘 alpha。我如何知道我的原始图像是否是预乘 alpha?
【问题讨论】:
标签: image opengl image-processing opencv png
你不能。
您唯一可以检查的是它是否没有预乘。为此,请检查所有像素并查看是否存在比 alpha 允许的值更高的颜色值if(max(col.r,col.g,col.b) > 255*alpha)//not premul。任何其他情况都是模棱两可的,可以或不可以预乘。您最好的猜测可能是假设它们不是大多数 PNG 的情况。
编辑:实际上,甚至我发布的代码都不起作用,因为那里有很多带有白色哑光的 PNG,所以图像必须包含具有0 的 alpha 的部分才能确定哑光颜色首先。
【讨论】:
80808000 是预乘 RGBA 中一个有效且有意义的值,它代表一个加法像素,这就是说预乘比直乘更通用的意义所在。在 PNG 中使用此类约定的软件通常在内部按照约定执行,没有人说此类 PNG 必须是可互操作的,因此您不会看到规范。尽管他们中的一些人可能会编写一些专有的元数据块来表示这一点。
Android Bitmap 存储从 PNG 加载的带有预乘 alpha 的图像。您无法以通常的方式从中获得非预乘的原始颜色。
为了在没有预乘 RGB 通道的情况下加载图像,我必须使用第 3 方 PNGDecoder 从这里:http://twl.l33tlabs.org/#downloads
【讨论】: