rgba通道转rgb_image – 将RGBA颜色转换为RGB
我已經考慮了約翰內斯的答案,因為他是對的。
*有人提出幾點意見,我原來的答案是不正確的。如果alpha值從正常反轉,它工作。然而,根據定義,這在大多數情況下不起作用。因此,我更新了下面的公式正確的正常情況。這最終等于@ hkurabko的回答下面*
然而,更具體的答案是將α值結合到基于不透明背景顏色(或者其所指的“啞光”)的實際顏色結果中。
有一個算法(從this維基百科的鏈接):
>規范化RGBA值,使它們都在0和1之間 – 只需將每個值除以255即可。我們將調用結果源。
>標準化也是無光澤的顏色(黑色,白色無論什么)。我們將調用結果BGColor注意 – 如果背景顏色也是透明的,那么你將不得不遞歸首先的過程(同樣,選擇一個遮罩),以獲得此操作的源RGB。
>現在,轉換被定義為(在這里完整的偽代碼!):
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)
要獲取Target的最終0-255值,您只需將所有規范化值乘以255,如果任何組合值超過1.0,則確保上限為255(這是過度曝光,有更復雜的算法處理這涉及整個圖像處理等)。
編輯:在你的問題,你說你想要一個白色背景 – 在這種情況下只是將BGColor固定為255,255,255。
總結
以上是生活随笔為你收集整理的rgba通道转rgb_image – 将RGBA颜色转换为RGB的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NV12图像格式叠加(水印原理演示)
- 下一篇: URL 长度限制