如何在没有init的情况下将Image转换为BufferedImage?

use*_*704 4 java graphics user-interface swing image

我想知道是否有一种方法可以将Image转换为BufferedImage而无需像a那样的代码

new BufferedImage(...)
Run Code Online (Sandbox Code Playgroud)

因为每个新的init都会让应用程序运行得更慢,而且,如果它在paint()方法中:(

请告知最佳转换方式.

谢谢

aio*_*obe 6

不,除非原件Image恰好BufferedImage已经是.然后你可以做一个演员:

BufferedImage bufImg = null;
if (origImage instanceof BufferedImage) {
    bufImg = (BufferedImage) origImage;
else {
    bugImg = new BufferedImage(...);
    // proper initialization
}
Run Code Online (Sandbox Code Playgroud)

如果它不是a,BufferedImage它很可能是例如a VolatileImage(API中的另一个具体子类).

从易失性图像的文档:

VolatileImage是一种图像,由于应用程序无法控制的情况(例如,由操作系统或其他应用程序引起的情况),它可能随时丢失其内容.

您可能已经理解,此类图像无法提供与a相同的界面BufferedImage,因此获取a的唯一方法BufferedImage是创建一个,并在其上绘制原始图像.


And*_*son 6

因为每个新的init都会让app运行得更慢

缓存一BufferedImage,然后仅在所需大小更改时才创建新图像.否则清除Graphics当前实例的对象并执行任何需要的新绘图.