这些Java教程是针对JDK 8编写的。本页面描述的示例和实践未利用后续版本中引入的改进,并可能使用已不再可用的技术。
有关Java SE 9及后续版本中更新的语言功能的概述,请参阅Java语言更改。
有关所有JDK版本的新功能、增强功能以及已删除或弃用选项的信息,请参阅JDK发布说明。
我们已经知道如何加载一个现有的图像,该图像可以是您系统中创建和存储的图像,也可以是网络上的任何位置。但是,您可能也想创建一个作为像素数据缓冲区的新图像。
在这种情况下,您可以手动创建一个BufferedImage
对象,使用这个类的三个构造函数:
BufferedImage
。BufferedImage
: TYPE_BYTE_BINARY
或 TYPE_BYTE_INDEXED
。new BufferedImage(colorModel, raster, premultiplied, properties)
- 使用指定的ColorModel
和Raster
构造一个新的BufferedImage
。另一方面,我们可以使用Component
类的方法。这些方法可以分析给定Component
或GraphicsConfiguration
的显示分辨率,并创建适当类型的图像。
Component.createImage(width, height)
GraphicsConfiguration.createCompatibleImage(width, height)
GraphicsConfiguration.createCompatibleImage(width, height, transparency)
GraphicsConfiguration返回一个BufferedImage类型的对象,但Component返回一个Image类型
的对象,如果您需要一个BufferedImage对象,那么您可以在代码中执行instanceof
并进行强制转换为BufferedImage。
正如在前面的课程中已经提到的,我们不仅可以在屏幕上渲染图像。图像本身可以被视为一个绘图表面。您可以使用BufferedImage
类的createGraphics()
方法来实现这个目的:
... BufferedImage off_Image = new BufferedImage(100, 50, BufferedImage.TYPE_INT_ARGB); Graphics2D g2 = off_Image.createGraphics();
离屏图像的另一个有趣用途是自动的双缓冲。通过将图像绘制到后备缓冲区,然后将该缓冲区复制到屏幕上,而不是直接绘制到屏幕上,可以避免动画图像中的闪烁。
Java 2D还允许访问离屏图像的硬件加速,这可以提供更好的渲染性能。您可以使用Image
类的以下方法来获得此功能的好处:
getCapabilities
方法允许您确定图像当前是否加速。setAccelerationPriority
方法允许您设置关于图像加速的重要性的提示。getAccelerationPriority
方法获取有关加速重要性的提示。