2012-02-05 230 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

相關問題