Я знаю, что я мог бы просто изменить его в программном обеспечении для обработки фотографий, но я хочу научиться делать это программно, поэтому я могу изменить его на любой цвет, который я хочу.Как изменить пиксели 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;
}
Мои извинения, если на самом деле это решение где-то в Интернете для этого, но я не мог найти его. Ну, вот и все. Я думаю, что я был достаточно конкретным.
Спасибо заранее!