【问题标题】:Why my BufferedImage pick the wrong color?为什么我的 BufferedImage 选择了错误的颜色?
【发布时间】:2016-02-28 13:20:19
【问题描述】:

我在另外三个 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;
}

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

【问题讨论】:

    标签: java bufferedimage


    【解决方案1】:

    Color 方法 getRedgetGreengetBlue 将该颜色分量的强度返回为 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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-23
      • 2016-03-12
      • 2021-09-18
      相关资源
      最近更新 更多