将具有底层颜色的RGBA转换为RGB?

时间:2011-06-26 18:48:55

标签: java colors transform alpha

我在使用Java转换Colors时遇到了问题。简化问题如下所示:

我的应用程序包含图像。我在这张图片上放了一个Recangle。 Rectangle的颜色定义为new Color(255,255,0,80)。

是否可以计算/转换屏幕上显示的颜色为没有Alpha值的颜色没有 getPixelColor() - 方法?不同的配方:我可以从具有alpha值+基础颜色的颜色计算没有alpha值的颜色吗?

我希望有人可以帮助我。

此致 迈克尔

1 个答案:

答案 0 :(得分: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())来优化很多。