我想知道有没有办法将图像转换为缓冲图像,而无需像
new BufferedImage(...)
因为每个新的初始化都会使应用程序运行速度变慢,而且,如果它在paint((方法中:(
请告知最佳转换方式。
谢谢
No.除非原始Image
碰巧已经是BufferedImage
。然后你可以做一个演员表:
BufferedImage bufImg = null;
if (origImage instanceof BufferedImage) {
bufImg = (BufferedImage) origImage;
else {
bugImg = new BufferedImage(...);
// proper initialization
}
如果它不是BufferedImage
,那么它很可能是一个VolatileImage
(API 中的另一个具体子类(。
从易失性图像的文档:
易失性图像是一种图像,由于应用程序无法控制的情况(例如,由操作系统或其他应用程序引起的情况(,它随时可能丢失其内容。
如您所知,这样的图像不能提供与BufferedImage
相同的界面,因此掌握BufferedImage
的唯一方法是创建一个,并在它上面绘制原始图像。
因为每个新的初始化都会使应用程序运行得更慢
缓存一个BufferedImage
,然后仅在所需大小更改时才创建新图像。否则,清除当前实例的Graphics
对象并执行所需的任何新绘图。
有没有办法用
paint()
方法绘制要JLabel
的BufferedImage
?
一种方便的方法是实现Icon
接口。在此示例中,Histogram
只是在标签被告知repaint()
时绘制自己。
如果图像源需要耗时的操作(如缩放(,请按静态工厂中所示预渲染图像,GradientImage
。