2011-06-26 62 views
8

我在Java中轉換顏色時遇到了問題。簡化的問題如下所示:將基礎顏色的RGBA轉換爲RGB?

我的應用程序包含一個圖像。我在這張圖片上放了一個Recangle。矩形的顏色被定義爲新顏色(255,255,0,80)。

是否有可能計算/變換其被示出在屏幕上成顏色而不阿爾法值顏色而不的getPixelColor() - 方法?不同的公式:我可以通過具有alpha值+基礎顏色的顏色來計算無Alpha值的顏色嗎?

我希望有人能幫助我。

問候, 邁克爾

+0

簡答:「是」。可能有用的閱讀[Alpha堆肥](http://en.wikipedia.org/wiki/Alpha_compositing) – 2011-06-26 18:58:35

回答

7

正如Wikipedia article狀態(假設不透明的背景):

int r, g, b; 
r = fgColor.getRed() * fgColor.getAlpha() + bgColor.getRed() * (255 - fgColor.getAlpha()); 
g = fgColor.getGreen() * fgColor.getAlpha() + bgColor.getGreen() * (255 - fgColor.getAlpha()); 
b = fgColor.getBlue() * fgColor.getAlpha() + bgColor.getBlue() * (255 - fgColor.getAlpha()); 
Color result = new Color(r/255, g/255, b/255); 

免責聲明:沒有測試過這一點,但它應該工作。

如果前景顏色不變(如填充的透明矩形),則可以通過預計算fgColor.getComponent() * fgColor.getAlpha()(255 - fgColor.getAlpha())來優化很多。

+0

非常感謝您的評論和代碼。它工作得很好:) – Michael

+0

@邁克爾:很高興聽到:) –