第1版和第2版有什么区别?在我的情况下,他们似乎也是这样做的,但是我到处阅读版本1是更好的方法。但是为什么呢?
public BufferedImage getImage(Icon icon) {
int w = icon.getIconWidth();
int h = icon.getIconHeight();
// version 1
GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
BufferedImage image = gd.getDefaultConfiguration().createCompatibleImage(w, h, Transparency.OPAQUE);
// version 2
// BufferedImage image = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
Graphics2D g = image.createGraphics();
icon.get().paintIcon(null, g, 0, 0);
g.dispose();
return image;
}发布于 2014-03-24 11:26:43
通常,第一种方法会导致需要更少的转换才能显示的Image。
在最好的情况下,“第一种方法”图像将具有与实际屏幕内存布局完全相同的内存布局,这意味着为了在屏幕上显示图像,可以按原样复制图像数据。只有当屏幕内存布局是ARGB (每个组件有8位),并且在所有其他情况下,图像必须被转换成目标格式(用户代码自动地透明地转换),“第二种方法”才是如此。
真正的案件介于两者之间,可以更多地涉及:
理论上,每次Image格式和GraphicsConfiguration格式不兼容时,您都应该重新创建图像.
实际上,您可以使用new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB) (或任何其他适合您需要的特定映像类型),直到可以证明正是使用泛型BufferedImages导致应用程序缓慢运行(因为转换为目标设备格式)或占用过多内存(因为转换需要额外的内存)。
https://stackoverflow.com/questions/22605949
复制相似问题