> 创建和绘制图像
我们已经知道如何加载现有映像,该映像已创建并存储在您的系统或任何网络位置。但是,您可能还希望创建一个新图像作为像素数据缓冲区。
在这种情况下,可以使用此类的三个构造函数手动创建BufferedImage
对象:
-
new BufferedImage(width,height,type)-构造 预定义图像类型之一的
BufferedImage
。 -
new BufferedImage(width,height,type,colorModel)-构造 预定义图像类型之一的
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 type
的对象,如果您需要 BufferedImage 对象,则可以执行instanceof
并转换为代码中的BufferedImage
。
正如上一课中已经提到的,我们不仅可以在屏幕上渲染图像。图像本身可以视为绘图表面。为此,您可以使用BufferedImage
类的createGraphics()
方法:
...
BufferedImage off_Image =
new BufferedImage(100, 50,
BufferedImage.TYPE_INT_ARGB);
Graphics2D g2 = off_Image.createGraphics();
屏幕外图像的另一个有趣用途是自动Double 缓冲。通过将图像绘制到后缓冲区,然后将该缓冲区复制到屏幕上而不是直接绘制到屏幕上,此功能可以避免动画图像中的闪烁。
Java 2D 还允许访问屏幕外图像的硬件加速,这可以提供更好的渲染和复制这些图像的性能。您可以通过使用Image
类的以下方法来获得此功能的好处:
-
getCapabilities
方法使您可以确定图像当前是否正在加速。 -
setAccelerationPriority
方法可让您设置有关图像加速重要性的提示。 -
getAccelerationPriority
方法获得有关加速重要性的提示。