我怎么知道图像是否是"预乘Alpha"?

Ada*_*Lee 4 opengl png opencv image image-processing

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

Pet*_*erT 8

你不能.

你能检查的唯一一件事是它是不是预先乘法的.要做到这一点,请查看所有像素,看看是否有一个颜色值的值高于alpha允许的值if(max(col.r,col.g,col.b) > 255*alpha)//not premul.任何其他情况都不明确,可以或不可以预乘.你最好的猜测可能是假设它们不像大多数PNG那样.

编辑:实际上,即使我发布的代码也没有用,因为那里有很多带有白色遮罩的PNG,因此图像必须包含具有alpha值的部分0以首先确定遮罩颜色.

  • 实际上*所有*PNG都不是预乘的.资料来源:第12.8节,http://www.w3.org/TR/PNG-Rationale.html (7认同)
  • 遗憾的是,@ MarkRansom并非所有工具都符合此规范. (3认同)
  • 所有带有由Xcode创建并包含在iOS应用中的Alpha通道的PNG图像都使用前置像素值. (2认同)
  • @MarkRansom:你错了.`80808000`是预乘RGBA中有效的有意义值,它代表一个加性像素,这就是说预乘是**比直线更普遍**.在PNG中使用此类约定的软件通常在内部按惯例执行,没有人说这些PNG必须是可互操作的,因此您不会看到规范.虽然可能有些人写了一些专有的元数据块来表示这一点. (2认同)