2012-02-05 78 views

回答

6

你不能。

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

编辑:实际上,即使我发布的代码也不会工作,因为有很多PNG与白色哑光,所以图像将不得不包含具有0的alpha值的部分以首先确定哑光颜色。

+3

其实*所有* PNG格式不预乘。资料来源:第12.8节,http://www.w3.org/TR/PNG-Rationale.html – 2012-05-25 16:04:43

+2

@MarkRansom不幸的是,并非所有工具都符合此规范。 – clamp 2014-01-28 16:33:11

+0

@clamp那么这些工具在生成PNG输出时会有错误。规范说PNG文件必须*不*预乘alpha。 – 2014-01-28 17:07:08

3

Android Bitmap存储从带有预乘alpha的PNG加载的图像。通常情况下,您无法从中获得未预先采集的原始颜色。

为了加载图像,而无需RGB渠道被预乘我不得不使用第三方PNGDecoder从这里:http://twl.l33tlabs.org/#downloads

相关问题