java - BufferedImage 颜色 channel 蒙版

标签 java image colors bufferedimage mask

我在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/

相关文章:

ios - NavigationBar 改变颜色本身

java - OpenCV 颜色检测为黄色

java - 在类级别和方法中声明对象之间的区别

java - LazyCollectionOption.EXTRA 与 Spring 代理?

java - AVD 的 Arm 图像无法正常工作(Android Studio)。 CPU 上没有 VT-X

c - 如何在数组中存储 RGB 图像并在 C 中按 x,y 对其进行索引

c# - 在 C# 中将 PDF 导出为 JPG

linux 上的 java - 隐藏 ssl.keyStorePassword

javascript - 如何在 iframe 加载网站时显示加载 gif?

android - 在android中使用某种基本的艺术字