Module  java.desktop
软件包  java.awt.image

Class VolatileImage

  • All Implemented Interfaces:
    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对象针对渲染操作进行了优化,并将其划分到屏幕或其他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的空值或不正确的值可能会导致从validate返回错误的值,并可能导致后续的渲染问题。
        参数
        gc - 要验证此图像的GraphicsConfiguration对象。 null gc意味着validate方法应该跳过兼容性测试。
        结果
        IMAGE_OK如果图像不需要验证
        IMAGE_RESTORED如果图像需要恢复。 恢复意味着图像的内容可能已经受到影响,并且可能需要重新渲染图像。
        IMAGE_INCOMPATIBLE如果图像与传递到validate方法的GraphicsConfiguration对象不兼容。 不兼容性意味着图像可能需要使用新的ComponentGraphicsConfiguration重新创建,以获得可以成功使用该GraphicsConfiguration 不检查不兼容的图像是否需要恢复,因此在返回值为IMAGE_INCOMPATIBLE之后图像的状态不变,并且此返回值对于是否需要还原图像无关。
        另请参见:
        GraphicsConfigurationComponentIMAGE_OKIMAGE_RESTOREDIMAGE_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