gpt4 book ai didi

java - BufferedImage 颜色 channel 蒙版

转载 作者:行者123 更新时间:2023-12-01 23:52:31 25 4
gpt4 key购买 nike

我在JavaDoc上找到了这段代码,但我似乎无法理解它。

output.setRGB(x, y, (image.getRGB(x, y) & 0xff00ff00)
| ((image.getRGB(x, y) & 0xff0000) >> 16)
| ((image.getRGB(x, y) & 0xff) << 16));

据我所知,这段代码将 BufferedImage 中的蓝色变成红色。但如果我想用白色或其他颜色替换蓝色,反之亦然怎么办?

如果有任何帮助,我将不胜感激。

最佳答案

颜色的存储方式如下,以十六进制表示:

RRGGBBAA

红、绿、蓝、阿尔法。现在让我们看一下其中一行:

(image.getRGB(x, y) & 0xff0000) >> 16

image.getRGB(x, y) 将返回一个 RRGGBBAA 值,并且这一行使用 0xff0000<位掩码。这是一个视觉效果:

RRGGBBAA
&
00FF0000
=
00GG0000

因此,它将 RRGGBBAA 值转换为 GG0000

然后,向右位移 16 二进制位。 Java 无法以十六进制移动位,但我们现在正在以十六进制可视化颜色。因此,我们必须将 16 个二进制移位转换为 4 个十六进制移位,因为十六进制是以 16 为底的。二进制以 2 为基数,2^4 为 16,即十六进制的基数。

因此,必须右移 4 位。这会将 GG0000 转换为 GG,因为这些位向右移动了 4 位。

因此,我们现在有了颜色中绿色量的值。

您可以将类似的逻辑应用于其他线路,看看它们是如何工作的。

关于java - BufferedImage 颜色 channel 蒙版,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16146794/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com