Image 和 BufferedImage 有什么区别?
我可以直接从图像源“image.png”创建一个 BufferedImage 吗?
如果你熟悉 Java 的 util.List,Image 和 BufferedImage 的区别就和 List 和 LinkedList 的区别一样。
Image是泛型概念,BufferedImage是泛型概念的具体实现;有点像宝马是汽车制造的。
图像是一个抽象类。您不能直接实例化 Image 。BufferedImage 是一个后代,您可以实例化那个。因此,如果您了解抽象类和继承,您就会明白何时使用它们。
例如,如果您使用多个 Image 后代,它们将共享一些从 Image 继承的公共属性。
如果您想编写一个将任何一种后代作为参数的函数,您可以执行以下操作:
function myFunction(Image myImage) {
int i = myImage.getHeight();
...
}
然后,您可以通过将 BufferedImage 或 VolatileImage 传递给该函数来调用该函数。
BufferedImage myBufferedImage;
VolatileImage myVolatileImage;
...
myFunction(myVolatileImage);
myFunction(myBufferedImage);
您不会将 Image 转换为 BufferedImage,因为您永远不会拥有 Image。
Image
和 和有什么不一样BufferedImage
?
如使用图像的 Oracle Java 教程中所述
BufferedImage 类是 Java 2D 即时模式成像 API 的基石。它管理内存中的图像,并提供存储、解释和获取像素数据的方法。由于 BufferedImage 是 Image 的子类,它可以由接受 Image 参数的 Graphics 和 Graphics2D 方法呈现。
BufferedImage 本质上是具有可访问数据缓冲区的图像。因此,直接使用 BufferedImage 会更有效。BufferedImage 有一个 ColorModel 和一个 Raster 图像数据。ColorModel 提供图像像素数据的颜色解释。
我可以
BufferedImage
直接从图像源“image.png”创建一个吗?
当然。
BufferedImage img = ImageIO.read(getClass().getResource("/path/to/image"));