10

次のような方法で ImageIcon をグレースケールに変換する方法が Swing にあるかどうかを知りたいです。

component.setIcon(greyed(imageIcon));
4

2 に答える 2

14

の制限の 1 つは、さまざまなルック アンド フィールの実装でアイコンの無効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);
}
于 2013-01-16T13:59:20.797 に答える
10

以下を使用できます。

ImageIcon icon = new ImageIcon("yourFile.gif");
Image normalImage = icon.getImage();
Image grayImage = GrayFilter.createDisabledImage(normalImage);
于 2013-01-16T12:28:06.743 に答える