> 创建和绘制图像

我们已经知道如何加载现有映像,该映像已创建并存储在您的系统或任何网络位置。但是,您可能还希望创建一个新图像作为像素数据缓冲区。

在这种情况下,可以使用此类的三个构造函数手动创建BufferedImage对象:

  • new BufferedImage(width,height,type)-构造 预定义图像类型之一的BufferedImage

  • new BufferedImage(width,height,type,colorModel)-构造 预定义图像类型之一的BufferedImageTYPE_BYTE_BINARYTYPE_BYTE_INDEXED

  • new BufferedImage(colorModel, raster, premultiplied, properties)-使用指定的ColorModelRaster构造一个新的BufferedImage

另一方面,我们可以使用Component类的方法。这些方法可以分析给定ComponentGraphicsConfiguration的显示分辨率,并创建适当类型的图像。

  • 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方法获得有关加速重要性的提示。