为什么我的 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
方法 getRed
、getGreen
和 getBlue
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);
我在另外三个 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
方法 getRed
、getGreen
和 getBlue
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);