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

发布于 2024-11-17 09:20:18 字数 257 浏览 2 评论 0原文

我在 Java 中转换颜色时遇到问题。简化的问题如下所示:

我的应用程序包含图像。我在这张图片上放置了重新调整。矩形的颜色定义为 new Color(255, 255, 0, 80)。

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

我希望有人能帮助我。

问候, 迈克尔

i've got a problem with transforming Colors in Java. The simplified problem look like the following:

My application contains an image. I've layed an Recangle over this image. The color of the Rectangle is defined as new Color(255, 255, 0, 80).

Is it possible to calculate / transform the Color which is shown on the Screen into a Color without Alpha-Value without the getPixelColor()-Method? Different formulated: Can I calculate a Color without alpha-value from a Color with alpha-value + the underlying color?

I hope someone can help me.

Regards,
Michael

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

池木 2024-11-24 09:20:18

正如维基百科文章所述(假设背景不透明):

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 ())

Just as the Wikipedia article states (assuming opaque background):

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);

Disclaimer: haven't tested this but it should work.

If the foreground color is constant (such as a filled transparent rectangle), you can optimize a lot by precomputing fgColor.getComponent() * fgColor.getAlpha() and (255 - fgColor.getAlpha()).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文