☞ ░ 前往老猿Python博文目錄 ░
Alpha預乘(Premultiplied Alpha)和PRGBA
一般來說四通道圖像數據保存的都是ARGB或RGBA,其R、G、B值還沒有進行任何透明化處理,但這種格式在圖像合成時會存在兩個問題:
- 由於對有Alpha通道的圖片進行合成處理時,先要獲取原始圖像RGB的值,這個原始圖像真正的RGB值必須考慮Alpha通道,因此會進行一次計算:源圖像像素顏色 X alpha。如果這種計算都在合成時進行處理,性能處理壓力就會集中在合成階段;
- 在圖像合成時,有時需要進行插值處理,即根據兩個圖像的差異,採用插值計算來生成一個或多箇中間圖像,這種插值一般都是以RGB值進行插值計算,但帶Alpha通道的圖像RGB並不是最終顯示顏色的RGB,因此這種插值可能效果不理想。
爲了解決這個問題,在圖像處理過程中引入了預乘 (premultiplied)這個概念,經過預乘處理的圖像格式就稱爲PRGBA。預乘的算式是NewR=OldR*Alpha,Alpha取值爲0-1(如果爲0-255,除以255即可),保存的數據通常稱爲(ar,ag,ab,a),這樣PRGBA格式的像素四通道值保存了真正展現時的像素RGB值,又保存了Alpha通道的值,既解決了前面說的兩個問題,又可以還原原始RGBA數據。
PRGBA這個表示方法,由於預乘後保存的值是整數,會丟失小數點後的數值,很大可能引入誤差,特別是RGB值本身很小Alpha很大的情況下,這個誤差可能會比較大。
關於阿爾法通道、RGBA的更多內容請參考《圖像(層)正常混合模式詳解(上)》、《百度百科-RGBA》。
更多圖形圖像處理術語請參考《圖像處理術語解釋:圖像的灰度、色相、飽和度、亮度、明度、阿爾法通道、HSL、HSV、RGBA、ARGB和PRGBA概念以及Premultiplied Alpha(Alpha預乘)等基礎概念詳解》。