如何在Swing上将ImageIcon变为灰色

Alf*_*gon 9 java swing image image-processing grayscale

我想知道在Swing中是否有某种方法可以将ImageIcon转换为灰度,如下所示:

component.setIcon(greyed(imageIcon));
Run Code Online (Sandbox Code Playgroud)

tra*_*god 12

一个限制GrayFilter.createDisabledImage()是它旨在为各种外观和感觉实现中的图标创建禁用的外观.使用此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://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);
}
Run Code Online (Sandbox Code Playgroud)

  • 对上面代码的小增强:使用`gc.createCompatibleImage(w,h,Transparency.TRANSLUCENT);`而不是`gc.createCompatibleImage(w,h);`来保持原始图标的半透明度. (4认同)

Alf*_*gon 9

您可以使用以下内容:

ImageIcon icon = new ImageIcon("yourFile.gif");
Image normalImage = icon.getImage();
Image grayImage = GrayFilter.createDisabledImage(normalImage);
Run Code Online (Sandbox Code Playgroud)

  • @DavidKroukamp 鼓励在 Stack Exchange 网络上提问和回答您的问题,请参阅 - http://meta.stackexchange.com/a/17847/140951(如果您需要,我还有其他参考资料)了解更多信息。 (2认同)