I would like to know if there is some way in Swing to turn an ImageIcon to gray scale in a way like:
component.setIcon(greyed(imageIcon));
I would like to know if there is some way in Swing to turn an ImageIcon to gray scale in a way like:
component.setIcon(greyed(imageIcon));
One limitation of GrayFilter.createDisabledImage()
is that it is designed to create a disabled appearance for icons across diverse Look & Feel implementations. Using this ColorConvertOp
example, the following images contrast the effect:
GrayFilter.createDisabledImage()
: com.apple.laf.AquaLookAndFeel
ColorConvertOp#filter()
: com.apple.laf.AquaLookAndFeel
GrayFilter.createDisabledImage()
: com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel
ColorConvertOp#filter()
: com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel
/**
* @see https://mcmap.net/q/969127/-how-to-turn-imageicon-to-gray-on-swing/230513
* @see https://mcmap.net/q/1014434/-program-not-accessing-method-paintcomponent-of-extended-jpanel-class
*/
private Icon getGray(Icon icon) {
final int w = icon.getIconWidth();
final int h = icon.getIconHeight();
GraphicsEnvironment ge =
GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice gd = ge.getDefaultScreenDevice();
GraphicsConfiguration gc = gd.getDefaultConfiguration();
BufferedImage image = gc.createCompatibleImage(w, h);
Graphics2D g2d = image.createGraphics();
icon.paintIcon(null, g2d, 0, 0);
Image gray = GrayFilter.createDisabledImage(image);
return new ImageIcon(gray);
}
gc.createCompatibleImage(w, h, Transparency.TRANSLUCENT);
instead of gc.createCompatibleImage(w, h);
to keep the original icons translucency. –
Molybdous You can use the following:
ImageIcon icon = new ImageIcon("yourFile.gif");
Image normalImage = icon.getImage();
Image grayImage = GrayFilter.createDisabledImage(normalImage);
© 2022 - 2024 — McMap. All rights reserved.