如何在没有初始化的情况下将图像转换为缓冲图像



我想知道有没有办法将图像转换为缓冲图像,而无需像

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()方法绘制要JLabelBufferedImage

一种方便的方法是实现Icon接口。在此示例中,Histogram只是在标签被告知repaint()时绘制自己。

如果图像源需要耗时的操作(如缩放(,请按静态工厂中所示预渲染图像,GradientImage

相关内容

  • 没有找到相关文章

最新更新