我在Java中轉換顏色時遇到了問題。簡化的問題如下所示:將基礎顏色的RGBA轉換爲RGB?
我的應用程序包含一個圖像。我在這張圖片上放了一個Recangle。矩形的顏色被定義爲新顏色(255,255,0,80)。
是否有可能計算/變換其被示出在屏幕上成顏色而不阿爾法值顏色而不的getPixelColor() - 方法?不同的公式:我可以通過具有alpha值+基礎顏色的顏色來計算無Alpha值的顏色嗎?
我希望有人能幫助我。
問候, 邁克爾
我在Java中轉換顏色時遇到了問題。簡化的問題如下所示:將基礎顏色的RGBA轉換爲RGB?
我的應用程序包含一個圖像。我在這張圖片上放了一個Recangle。矩形的顏色被定義爲新顏色(255,255,0,80)。
是否有可能計算/變換其被示出在屏幕上成顏色而不阿爾法值顏色而不的getPixelColor() - 方法?不同的公式:我可以通過具有alpha值+基礎顏色的顏色來計算無Alpha值的顏色嗎?
我希望有人能幫助我。
問候, 邁克爾
正如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())
來優化很多。
非常感謝您的評論和代碼。它工作得很好:) – Michael
@邁克爾:很高興聽到:) –
簡答:「是」。可能有用的閱讀[Alpha堆肥](http://en.wikipedia.org/wiki/Alpha_compositing) – 2011-06-26 18:58:35