将ImageIcon转换为BufferedImage

12
我一直在尝试将ImageIcon转换为BufferedImage...但是一直没有成功。
我有一个预先存在的ImageIcon需要转换为BufferedImage,以便使用大量存在的BufferedImage操作。
我已经找到了一些方法,但它们都需要很高的CPU运算。
3个回答

41

有什么问题:

BufferedImage bi = new BufferedImage(
    icon.getIconWidth(),
    icon.getIconHeight(),
    BufferedImage.TYPE_INT_RGB);
Graphics g = bi.createGraphics();
// paint the Icon to the BufferedImage.
icon.paintIcon(null, g, 0,0);
g.dispose();

1
非常有帮助,非常感谢。我之前遇到过这种方法,但由于我立即假设它的性能不佳而迅速放弃了它,但在按照您的方式尝试后,一切似乎都很正常。 - Caelum
3
如果图标中有透明像素,BufferedImage.TYPE_INT_ARGB 就会被使用。 - Matthieu
在调用paintIcon之前,我们不应该也执行g.setComposite(AlphaComposite.Src)以按原样复制所有透明像素,而不是严格地“透明黑色”吗? - SerVB

10

查看 ImageIconImageBufferedImage

ImageIcon yourImage;
Image image = yourImage.getImage();
BufferedImage buffered = (BufferedImage) image;

3
如果ImageIcon包含BufferedImage,请使用此方法;否则使用Werner的答案。 - aditsu quit because SE is EVIL
1
这在Windows上可以运行,但在Linux上不行(在Ubuntu上尝试过)。 - Matthieu

-3

我尝试了一个叫做Scalr的东西,下面是代码:

Scalr.resize((BufferedImage) ImageIO.read(file), Method.SPEED, 250, OP_ANTIALIAS, OP_BRIGHTER);

谢谢。


1
未回答问题。你只是读取文件,而不是将ImageIcon对象转换为BufferedImage对象。 - Samuël Visser

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接