我听说在进行图层混合等操作时需要使用预乘alpha。那么我如何知道我的原始图像是否采用了预乘alpha呢?
我听说在进行图层混合等操作时需要使用预乘alpha。那么我如何知道我的原始图像是否采用了预乘alpha呢?
你不能这样做。
你唯一可以检查的是颜色是否未预乘。要做到这一点,需要遍历所有像素,并查看是否有一个颜色值高于允许的 alpha 值。 if(max(col.r,col.g,col.b) > 255*alpha)//not premul
。其他情况都是模糊的,可能是预乘的,也可能不是。你最好的猜测可能是假设它们不是预乘的,因为大多数 PNG 图片都是这种情况。
编辑:实际上,即使我发布的代码也无法工作,因为有很多 PNG 图片具有白色底板,所以图像首先必须包括 alpha 值为0
的部分来确定底板颜色。
Android的Bitmap
存储从带有预乘alpha通道的PNG加载的图像。您不能以通常的方式从中获取未预乘原始颜色。
为了加载没有预乘RGB通道的图像,我必须使用第三方的PNGDecoder
,可以在此处找到:http://twl.l33tlabs.org/#downloads
80808000
是一个有效且有意义的值,它代表了一个加法像素,这就是说预乘比直接表示更通用。在PNG中使用这种约定的软件通常会通过约定内部实现,没有人说这样的PNG必须是可互操作的,因此你不会看到规范。尽管可能有些软件会写一些专有的元数据块来表示这一点。 - Yakov Galka