Question: 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));

```

Answer: 
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](https://stackoverflow.com/a/12228640/230513), the following images contrast the effect:

`GrayFilter.createDisabledImage()`: `com.apple.laf.AquaLookAndFeel`
![image](https://i.stack.imgur.com/UJAEt.png)

`ColorConvertOp#filter()`: `com.apple.laf.AquaLookAndFeel`
![image](https://i.stack.imgur.com/H3LYo.png)

`GrayFilter.createDisabledImage()`: `com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel`
![image](https://i.stack.imgur.com/TGDNC.png)

`ColorConvertOp#filter()`: `com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel`
![image](https://i.stack.imgur.com/3mhgf.png)

```
/**
 * @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);
}

```
You can use the following:

```
ImageIcon icon = new ImageIcon("yourFile.gif");
Image normalImage = icon.getImage();
Image grayImage = GrayFilter.createDisabledImage(normalImage);

```