Как сделать ImageIcon серым на Swing

Я хотел бы знать, есть ли какой-нибудь способ в Swing, чтобы превратить ImageIcon в оттенки серого таким образом:

component.setIcon(greyed(imageIcon));

2 ответа

Решение

Одно ограничение GrayFilter.createDisabledImage() заключается в том, что он предназначен для создания отключенного внешнего вида значков в различных реализациях Look & Feel. Используя это ColorConvertOp Например, следующие изображения контрастируют с эффектом:

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://stackru.com/q/14358499/230513
 * @see https://stackru.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);
}

Вы можете использовать следующее:

ImageIcon icon = new ImageIcon("yourFile.gif");
Image normalImage = icon.getImage();
Image grayImage = GrayFilter.createDisabledImage(normalImage);
Другие вопросы по тегам