2014-12-06 2 views
0

Я знаю, что я мог бы просто изменить его в программном обеспечении для обработки фотографий, но я хочу научиться делать это программно, поэтому я могу изменить его на любой цвет, который я хочу.Как изменить пиксели ImageIcon на белые пиксели?


Во-первых, я хотел бы сказать, что я искал решение около двух часов, и я не мог найти тот, который работает для меня, или тот, который имеет дело с моей конкретной проблемы.

Я загрузил несколько значков из Интернета, и они изначально черные с прозрачным фоном, что хорошо для баров меню и т. Д. Но их трудно заметить на панели инструментов, и я хочу изменить черный цвет на эти значки на белый цвет. Вот an edited screenshot of what I'm trying to achieve и вот a screenshot of what I achieve. (Извините за ссылки, мне нужно как минимум 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()); 
    } 
} 

Я не уверен, что если вам нужна загрузка ресурсов класс, но я подумал, что это может помочь вам полностью понять мою проблему и уметь помочь мне лучше всего поступить. Итак, вот мой код Ресурсы класса сниппет:

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; 
} 

Мои извинения, если на самом деле это решение где-то в Интернете для этого, но я не мог найти его. Ну, вот и все. Я думаю, что я был достаточно конкретным.

Спасибо заранее!

ответ

1

два подхода являются общими:

  • шлейфом через BufferedImage используя getRGB() и setRGB() по мере необходимости, для example.

  • Использовать LookupOp, как показано в приведенных примерах here.

Смежные вопросы