2010-01-08 67 views
1

基本上,我有一個上下文,我不能編程色調圖像,但我可以改變它的alpha值。通過一些實驗,我發現我可以將圖像的紅色,藍色和綠色版本與特定的alpha值疊加,以生成各種顏色。但是,我想知道是否有可能通過這種方法實現真正​​的RGB表示?如果是這樣,那麼將紅色,藍色和綠色圖層的RGB值轉換爲不同的alpha值的公式是什麼?阿爾法混合紅色,藍色和綠色圖像產生一個圖像有色任何rgb值?

回答

3

阿爾法組合的基本的「方程」是:

alpha * (R1,G1,B1) + (1-alpha) * (R2,G2,B2) 

當你有三層帶alpha你實際上結合4層(第四之一是黑色),以使最終的顏色是:

alpha1 * (R1,G1,B1) + (1-alpha1) * ( 
    alpha2 * (R2,G2,B2) + (1-alpha2) * (
     alpha3 * (R3,G3,B3) + (1-alpha2) * (0,0,0))) 

只要你有每個層上的相同的圖像和層1是紅色通道(G1 = B1 = 0)和二層是綠色和三層是藍色你得到:

(alpha1 * R, (1-alpha1)*alpha2 * G, (1-alpha1)*(1-alpha2)*alpha3 * B) 

對於白色像素,你可以做任何可能的顏色。對於黑色像素,除黑色外無法做任何事情。對於任何其他像素,您受R,G和B的值限制。

假設您想在當前顏色爲(R,G,B)的像素處實現(Rd,Gd,Bd),則你將不得不選擇:

alpha1 = Rd/R 
alpha2 = Gd/(G*(1-alpha1)) 
alpha3 = Bd/(B*(1-alpha1)*(1-alpha2)) 

的問題是,阿爾法通常只能在0和1之間。因此,舉例來說,如果路> [R有什麼可以做。

如果您可以控制混合功能(例如,在Photoshop中),則可以做得更好。

+1

因此,使用該公式,我將如何從一個我想要實現的RGB值中導出alpha1,alpha2和alpha3? 如果R = 0xAA,那麼alpha1 = 0xAA/0xFF? – Chris 2010-01-08 21:30:36

+0

我編輯了我的答案。如果您認爲它是一個很好的答案,請考慮upvoting /檢查。 – 2010-01-08 21:56:17

+0

我在photoshop上通過第3層圓圈互相嘗試並插入值。圓形顏色 r:0xff0000 g:0x00ff00 b:0x0000ff 如果我想要實現顏色值0xaa5588,則您的公式分別給出.69,.32,.78的alpha值。但是,這些分層不會產生適當的顏色,無論是在黑色還是白色背景下。這基本上是我試圖實現的場景。我也嘗試減去3個目標值中的最低值(0x55),並使用這些超過0xFF的新值,這些值越來越近,但並不完全相同。有什麼想法嗎? – Chris 2010-01-08 22:35:28

0

我不認爲這是可能的,如果我正確地理解你。

如果對於某個像素,圖像的紅色值爲0.5,則可以將其與(典型)範圍[0,1]中的alpha組合以形成任何值,包括0.5,但包括0.5你不能超越,得到例如作爲輸出值的0.6左右。

0

如果您想創建混合在一起的3個圖層疊加到原始圖像上,這很有可能。這是一個指向Paint Shop Pro中的函數來執行硬件部分的Python腳本的鏈接。

http://pixelnook.home.comcast.net/~pixelnook/SplitToRGB.htm

如果您需要更多的細節,發表評論,我會盡力以後,以填補進去。

相關問題