为什么我的 BufferedImage 选择了错误的颜色?

Why my BufferedImage pick the wrong color?

我在另外三个 BufferedImage 中将图像的颜色分开,当我再次将它们放在一起时,我只有蓝色。 当我测试红色图像真的变成红色时,我发现它也是蓝色的,它与绿色完全一样。 这是我的代码。

public void modifyImage(BufferedImage image) {
    BufferedImage green = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_RGB);
    BufferedImage blue = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_RGB);
    BufferedImage red = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_RGB);
    for(int y= 0; y < image.getHeight(); y ++){
        for(int x = 0; x < image.getWidth(); x++){
            red.setRGB(x, y, new Color(image.getRGB(x, y)).getRed());
            green.setRGB(x, y, new Color(image.getRGB(x, y)).getGreen());
            blue.setRGB(x, y, new Color(image.getRGB(x, y)).getBlue());
        }
    }
    BufferedImage finalImage = new BufferedImage(red.getWidth(), red.getHeight(), BufferedImage.TYPE_INT_RGB);
    for(int y= 0; y < image.getHeight(); y ++){
        for(int x = 0; x < image.getWidth(); x++){
            finalImage.setRGB(x, y, new Color(new Color(red.getRGB(x, y)).getRed(),new Color(green.getRGB(x, y)).getGreen(),new Color(blue.getRGB(x, y)).getBlue()).getRGB());
        }
    }

    this.image = green;
}

那么我的错误在哪里呢?我错过了什么?

Color 方法 getRedgetGreengetBlue return 该颜色分量的强度,为 0 到 255 之间的数字。如果您将这些数字解释为打包的 RGB 颜色,它们只填充蓝色分量,所以这就是为什么您只得到蓝色的原因。您需要按位右移以使颜色分量移到正确的位置。

再说一次,您不需要首先使用这些方法来提取颜色,只需使用蒙版即可:

        red.setRGB(x, y,   image.getRGB(x, y)&0xFF0000);
        green.setRGB(x, y, image.getRGB(x, y)&0x00FF00);
        blue.setRGB(x, y,  image.getRGB(x, y)&0x0000FF);