模块  java.desktop
软件包  java.awt.image

Class VolatileImage

  • 实现的所有接口
    Transparency

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

    图像的绘图表面(图像内容实际驻留的存储器)可能丢失或无效,导致该存储器的内容消失。 因此需要恢复或重建绘图表面,并且需要重新绘制该表面的内容。 VolatileImage提供了一个界面,允许用户检测这些问题并在发生问题时进行修复。

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

    此图像不应直接进行子类化,但应使用Component.createVolatileImageGraphicsConfiguration.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类的子类,其中包括从潜在的ImageProducer收到信息时为异步通知采用ImageObserver参数的方法。 由于此VolatileImage未从异步源加载,因此采用ImageObserver参数的各种方法的行为就像已从ImageProducer获取数据ImageProducer 具体来说,这意味着这些方法的返回值永远不会指示信息尚不可用,并且永远不需要为异步回调通知记录此类方法中使用的ImageObserver

    从以下版本开始:
    1.4
    • 构造方法详细信息

      • VolatileImage

        public VolatileImage()
    • 方法详细信息

      • getSnapshot

        public abstract BufferedImage getSnapshot()
        返回此对象的静态快照图像。 返回的BufferedImage仅在请求时与VolatileImage一起使用,并且将来不会更新VolatileImage任何更改。
        结果
        BufferedImage代表这个VolatileImage
        另请参见:
        BufferedImage
      • 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()。
        Specified by:
        getSource在类 Image
        结果
        ImageProducer可用于生成此图像的BufferedImage表示的像素。
        另请参见:
        ImageProducergetSnapshot()
      • createGraphics

        public abstract Graphics2D createGraphics()
        创建一个 Graphics2D ,可用于绘制到此 VolatileImage
        结果
        Graphics2D ,用于绘制到这个图像。
      • validate

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

        public abstract boolean contentsLost()
        返回true如果呈现数据自去年失去validate电话。 应用程序应在图像的任何一系列渲染操作结束时调用此方法,以查看是否需要验证图像并重新渲染渲染。
        结果
        true如果需要恢复绘图表面; 否则为false
      • getCapabilities

        public abstract ImageCapabilities getCapabilities()
        返回一个ImageCapabilities对象,可以查询该VolatileImage的特定功能。 这将允许程序员在他们创建的特定VolatileImage对象上找到更多的运行时信息。 例如,用户可能会创建一个VolatileImage但系统可能没有用于创建该大小的图像的视频内存,因此尽管该对象是VolatileImage,但它并不像此平台上的其他VolatileImage对象那样加速。 用户可能希望该信息找到其问题的其他解决方案。
        结果
        包含此 VolatileImage功能的 ImageCapabilities对象。
        从以下版本开始:
        1.4