Java 如何更改ImageIcon';从黑色像素到白色像素?

Java 如何更改ImageIcon';从黑色像素到白色像素?,java,image,swing,colors,bufferedimage,Java,Image,Swing,Colors,Bufferedimage,我知道我可以在一个照片处理软件中更改它,但我想学习编程,这样我就可以将它更改为我想要的任何颜色 首先,我想说的是,我一直在寻找大约两个小时的解决方案,但我找不到一个适合我的解决方案,也找不到一个能解决我确切问题的解决方案 我从互联网上下载了一些图标,它们原本是黑色的,背景透明,这对菜单栏和其他东西很有用。但是,它们在我的工具栏上很难被注意到,我想把这些图标上的黑色改成白色。这是,这是。(抱歉链接,我需要至少10个声誉来发布图片。) 下面是我的实用程序类,它负责失败的工作: public fin

我知道我可以在一个照片处理软件中更改它,但我想学习编程,这样我就可以将它更改为我想要的任何颜色


首先,我想说的是,我一直在寻找大约两个小时的解决方案,但我找不到一个适合我的解决方案,也找不到一个能解决我确切问题的解决方案

我从互联网上下载了一些图标,它们原本是黑色的,背景透明,这对菜单栏和其他东西很有用。但是,它们在我的工具栏上很难被注意到,我想把这些图标上的黑色改成白色。这是,这是。(抱歉链接,我需要至少10个声誉来发布图片。)

下面是我的实用程序类,它负责失败的工作:

public final class Utility{
    public static ImageIcon replaceIconColor(ImageIcon icon, Color oldColor, Color newColor){
        BufferedImage image = iconToImage(icon);

        for(int y = 0; y < image.getHeight(); y++){
            for(int x = 0; x < image.getWidth(); x++){
                Color pixel = new Color(image.getRGB(x, y));
                if((pixel.getRed() == oldColor.getRed()) && (pixel.getGreen() == oldColor.getGreen()) && (pixel.getBlue() == oldColor.getBlue()) && (pixel.getAlpha() == oldColor.getAlpha())){
                    image.setRGB(x, y, newColor.getRGB());
                }
            }
        }

        return new ImageIcon(image);
    }

    public static BufferedImage iconToImage(ImageIcon icon){
        return Resources.loadImage(icon.getDescription());
    }
}
我很抱歉,如果互联网上真的有这样的解决方案,但我找不到。好了,就这些。我想我已经够具体的了


提前感谢您

两种方法很常见:

  • 根据需要,使用
    getRGB()
    setRGB()
    循环浏览
    buffereImage
    ,以执行以下操作

  • 如引用的示例所示,请使用a

public static ImageIcon loadImageIcon(String fileName){
    URL imageURL = Resources.class.getResource("/Resources/Images/" + fileName);
    ImageIcon imageIcon = new ImageIcon(imageURL);
    imageIcon.setDescription(fileName);
    return imageIcon;
}

public static BufferedImage loadImage(String fileName){
    URL imageURL = Resources.class.getResource("/Resources/Images/" + fileName);
    BufferedImage image = null;

    try{
        image = ImageIO.read(imageURL);
    }catch(IOException e){
        e.printStackTrace();
    }

    return image;
}