模块 java.desktop

类 VolatileImage

java.lang.Object
java.awt.Image
java.awt.image.VolatileImage
所有已实现的接口:
Transparency

public abstract class VolatileImage extends Image implements Transparency
VolatileImage 是一个图像,由于超出应用程序控制的情况(例如,由操作系统或其他应用程序引起的情况),它可能随时丢失其内容。由于硬件加速的潜力,VolatileImage 对象在某些平台上具有显着的性能优势。

图像的绘图表面(图像内容实际所在的内存)可能会丢失或失效,从而导致该内存的内容消失。因此需要恢复或重新创建绘图表面,并且需要重新渲染该表面的内容。 VolatileImage 提供了一个接口,允许用户检测这些问题并在它们发生时修复它们。

创建 VolatileImage 对象时,可能会分配有限的系统资源,例如视频内存 (VRAM),以支持图像。当不再使用 VolatileImage 对象时,它可能会被垃圾收集并返回那些系统资源,但这个过程不会在保证的时间发生。创建许多 VolatileImage 对象的应用程序(例如,调整大小的窗口可能会在大小更改时强制重新创建其后台缓冲区)可能会用完用于新 VolatileImage 对象的最佳系统资源,这仅仅是因为旧对象尚未从系统中删除。 (可能仍会创建新的 VolatileImage 对象,但它们的性能可能不如在加速内存中创建的对象好)。随时可以调用flush方法,主动释放VolatileImage占用的资源,不影响后续的VolatileImage对象加速。这样,应用程序可以更好地控制过时的 VolatileImage 对象占用的资源状态。

此图像不应直接子类化,而应使用 Component.createVolatileImage GraphicsConfiguration.createCompatibleVolatileImage(int, int) 方法创建。

使用 VolatileImage 对象的示例如下:

 // image creation
 VolatileImage vImg = createVolatileImage(w, h);


 // rendering to the image
 void renderOffscreen() {
   do {
     if (vImg.validate(getGraphicsConfiguration()) ==
       VolatileImage.IMAGE_INCOMPATIBLE)
     {
       // old vImg doesn't work with new GraphicsConfig; re-create it
       vImg = createVolatileImage(w, h);
     }
     Graphics2D g = vImg.createGraphics();
     //
     // miscellaneous rendering commands...
     //
     g.dispose();
   } while (vImg.contentsLost());
 }


 // copying from the image (here, gScreen is the Graphics
 // object for the onscreen window)
 do {
   int returnCode = vImg.validate(getGraphicsConfiguration());
   if (returnCode == VolatileImage.IMAGE_RESTORED) {
     // Contents need to be restored
     renderOffscreen();   // restore contents
   } else if (returnCode == VolatileImage.IMAGE_INCOMPATIBLE) {
     // old vImg doesn't work with new GraphicsConfig; re-create it
     vImg = createVolatileImage(w, h);
     renderOffscreen();
   }
   gScreen.drawImage(vImg, 0, 0, this);
 } while (vImg.contentsLost());
 

请注意,此类是 Image 类的子类,其中包括采用 ImageObserver 参数进行异步通知的方法,因为信息是从潜在的 ImageProducer 接收到的。由于此 VolatileImage 不是从异步源加载的,因此采用 ImageObserver 参数的各种方法将表现得好像已经从 ImageProducer 获得数据一样。具体来说,这意味着此类方法的返回值永远不会指示信息尚不可用,并且永远不需要为异步回调通知记录此类方法中使用的ImageObserver

自从:
1.4
  • 字段详细信息

  • 构造方法详细信息

    • VolatileImage

      protected VolatileImage()
      子类调用的构造方法。
  • 方法详情

    • getSnapshot

      public abstract BufferedImage  getSnapshot()
      返回此对象的静态快照图像。返回的 BufferedImage 仅与请求时的 VolatileImage 一致,不会随 VolatileImage 的任何未来更改而更新。
      返回:
      这个 VolatileImageBufferedImage 表示
      参见:
    • getWidth

      public abstract int getWidth()
      返回 VolatileImage 的宽度。
      返回:
      这个 VolatileImage 的宽度。
    • getHeight

      public abstract int getHeight()
      返回 VolatileImage 的高度。
      返回:
      这个 VolatileImage 的高度。
    • getSource

      public ImageProducer  getSource()
      这将返回此 VolatileImage 的 ImageProducer。请注意,VolatileImage 对象针对渲染操作和 blitting 到屏幕或其他 VolatileImage 对象进行了优化,而不是读回图像的像素。因此,getSource 等操作的执行速度可能不如不依赖读取像素的操作快。还要注意,从图像中读取的像素值仅在它们被检索时才与图像中的像素值一致。此方法在发出请求时获取图像的快照,返回的 ImageProducer 对象使用该静态快照图像,而不是原始的 VolatileImage。调用 getSource() 等同于调用 getSnapshot().getSource()。
      指定者:
      getSource 在类 Image
      返回:
      ImageProducer 可用于为该图像的 BufferedImage 表示生成像素。
      参见:
    • getGraphics

      public Graphics  getGraphics()
      此方法返回 Graphics2D ,但此处是为了向后兼容。 createGraphics 更方便,因为它被声明返回一个 Graphics2D
      指定者:
      getGraphics 在类 Image
      返回:
      Graphics2D ,可用于绘制此图像。
      参见:
    • createGraphics

      public abstract Graphics2D  createGraphics()
      创建一个 Graphics2D ,可用于绘制此 VolatileImage
      返回:
      a Graphics2D ,用于绘制此图像。
    • validate

      public abstract int validate(GraphicsConfiguration  gc)
      如果表面在上次 validate 调用后丢失,则尝试恢复图像的绘图表面。还根据给定的 GraphicsConfiguration 参数验证此图像,以查看从此图像到 GraphicsConfiguration 的操作是否兼容。不兼容组合的一个示例可能是在一个图形设备上创建 VolatileImage 对象然后用于呈现到不同图形设备的情况。由于 VolatileImage 对象往往是非常特定于设备的,因此此操作可能无法按预期工作,因此此验证调用的返回代码会指出不兼容。 gc 的空值或不正确的值可能会导致从 validate 返回不正确的值,并可能导致以后的渲染问题。
      参数:
      gc - 用于验证此图像的 GraphicsConfiguration 对象。空 gc 意味着验证方法应该跳过兼容性测试。
      返回:
      IMAGE_OK 如果图像不需要验证
      IMAGE_RESTORED 如果图像需要修复。恢复意味着图像的内容可能已经受到影响,图像可能需要重新渲染。
      IMAGE_INCOMPATIBLE 如果图像与传递给 validate 方法的 GraphicsConfiguration 对象不兼容。不兼容意味着可能需要使用新的 ComponentGraphicsConfiguration 重新创建图像,以便获得可与此 GraphicsConfiguration 成功使用的图像。不检查不兼容的图像是否需要恢复,因此图像的状态在 IMAGE_INCOMPATIBLE 返回值后保持不变,并且此返回值不暗示图像是否需要恢复。
      参见:
    • contentsLost

      public abstract boolean contentsLost()
      如果渲染数据自上次 validate 调用后丢失,则返回 true。应用程序应在对图像进行任何一系列渲染操作结束时调用此方法,以查看是否需要验证图像并重做渲染。
      返回:
      true 如果绘图表面需要恢复; false否则。
    • getCapabilities

      public abstract ImageCapabilities  getCapabilities()
      返回一个 ImageCapabilities 对象,可以查询此 VolatileImage 的特定功能。这将允许程序员找到有关他们创建的特定 VolatileImage 对象的更多运行时信息。例如,用户可能创建了一个 VolatileImage,但系统可能没有剩余视频内存来创建该大小的图像,因此尽管该对象是一个 VolatileImage,但它的加速不如该平台上的其他 VolatileImage 对象。用户可能需要该信息来找到解决他们问题的其他方法。
      返回:
      包含此 VolatileImage 功能的 ImageCapabilities 对象。
      自从:
      1.4
    • getTransparency

      public int getTransparency()
      返回透明度。返回 OPAQUE、BITMASK 或 TRANSLUCENT。
      指定者:
      getTransparency 在接口 Transparency
      返回:
      这个 VolatileImage 的透明度。
      自从:
      1.5
      参见: