【问题标题】:How to change colors of a Java Buffered Image如何更改 Java 缓冲图像的颜色
【发布时间】:2014-11-24 00:07:56
【问题描述】:

我有一个 JavaBufferedImage。前景为黑色,背景为透明。我想将图像重新着色为红色。

我已阅读其他人的帖子并尝试使用此代码,但我的图像在运行时完全透明。

有人有什么想法吗?我是 Java 2D 图像处理库的新手。谢谢。

    imageIcon= new ImageIcon(getImageURL("/ImagesGun/GunBase.png"));
    gunBaseImage= Utilities.toBufferedImage(imageIcon.getImage());

    int red = 0x00ff0000;
    int green = 0x0000ff00;
    int blue = 0x000000ff;

    int width = gunBaseImage.getWidth();
    int height = gunBaseImage.getHeight();

    //Loop through the image and set the color to red
    for(int x = 0; x < width; x++){
        for(int y = 0; y < height; y++){
            long pixel = gunBaseImage.getRGB(x, y);
            if(pixel != 0){
                red = 0x00ff0000;

                gunBaseImage.setRGB(x,y,red);
            }

        }
    }

【问题讨论】:

  • 为每个像素调用 getRGB 和 setRGB 会很慢,因为这些方法试图进行完整的色彩空间转换。对于图像处理,最好访问 BufferedImage 后面的 int 数组。

标签: java java-2d


【解决方案1】:

您使用的是完全透明的红色值。颜色定义中的第一个条目是 alpha 值。如果你想要一个完全不透明的颜色,你需要使用 ff 作为第一个值。因此你的红色应该是 0xffff0000,你的绿色应该是 0xff00ff00 等等。这也意味着黑色是ff000000。

【讨论】:

  • 这是真的。我认为,如果他想保持不透明度不变,他必须屏蔽该位并处理颜色本身的值,这意味着他需要更改他的if(pixel !=0) 检查,对吗?然后,在他的if() 块中,他需要进行按位与运算,将原始不透明度添加到他想要的颜色中。
  • 我的想法正是@hfontanez。这就是为什么我提到不透明的黑色是 0xff000000 以便他可以做到if(pixel != 0xff000000)
  • @user1104028 不要忘记点击星号来接受 Matthew 的回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-25
  • 2020-10-10
相关资源
最近更新 更多