How to turn ImageIcon to gray on Swing
grayscale, image, image-processing, java, swing
Solution
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://stackoverflow.com/q/14358499/230513
* @see https://stackoverflow.com/a/12228640/230513
*/
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);
}
Problem
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)); ```