3 回答

TA貢獻1998條經(jīng)驗 獲得超6個贊
我贊成約翰尼斯的回答,因為他對此是正確的。
*有人提出我的原始答案不正確的評論。如果alpha值與正常值相反,則可以正常工作。但是,根據(jù)定義,這在大多數(shù)情況下不起作用。因此,我更新了以下公式以適合正常情況。最終等于@hkurabko在下面的回答*
但是,一個更具體的答案是將alpha值基于不透明的背景色(或稱為“遮罩”)合并到實際的顏色結(jié)果中。
為此有一個算法(來自此 Wikipedia鏈接):
標準化RGBA值,使它們都在0到1之間-只需將每個值除以255即可。我們稱之為結(jié)果Source。
還可以對遮罩色進行歸一化(黑色,白色等)。我們將結(jié)果稱為“ BGColor 注” -如果背景顏色也是透明的,則必須首先遞歸該過程(再次選擇遮罩),以獲取此操作的源RGB。
現(xiàn)在,將轉(zhuǎn)換定義為(在此處完整的偽代碼!):
Source => Target = (BGColor + Source) =
Target.R = ((1 - Source.A) * BGColor.R) + (Source.A * Source.R)
Target.G = ((1 - Source.A) * BGColor.G) + (Source.A * Source.G)
Target.B = ((1 - Source.A) * BGColor.B) + (Source.A * Source.B)
要獲得最終的0-255值,Target只需將所有歸一化的值乘以255,并確保在任何組合值超過1.0時將上限設(shè)置為255(這是過度曝光,并且有更復(fù)雜的算法來處理此問題涉及整個圖像處理等)。
編輯:在您的問題中,您說過您想要一個白色背景-在那種情況下,只需將BGColor固定為255,255,255即可。
- 3 回答
- 0 關(guān)注
- 1930 瀏覽
添加回答
舉報