モジュール java.desktop
パッケージ 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());
     

    情報は潜在的なImageProducerから得られるため、このクラスは、非同期通知にImageObserverパラメータを使用するメソッドを含むImageクラスからサブクラス化されます。 このVolatileImageは非同期ソースからロードされないので、ImageObserverパラメータを持つ複数のメソッドが、データがImageProducerから取得済みであるかのように動作します。 ここで重要なことは、このようなメソッドからの戻り値を確認しても、情報が有効かどうかは判断できないということです。したがって、これらのメソッドで使用されているImageObserverを、非同期コールバック通知のために記録する必要はありません。

    導入されたバージョン:
    1.4
    • コンストラクタの詳細

      • VolatileImage

        public VolatileImage()
    • メソッドの詳細

      • getSnapshot

        public abstract BufferedImage getSnapshot()
        このオブジェクトの静的なスナップショット・イメージを返します。 返されるBufferedImageは、要求があった時点のVolatileImageの内容だけを反映したものであり、それ以降にVolatileImageが変更されても更新されません。
        戻り値:
        このVolatileImageBufferedImage表現
        関連項目:
        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()を呼び出した場合と同じ結果が得られます。
        定義:
        getSource、クラス: Image
        戻り値:
        このイメージのBufferedImage表現のピクセル生成に使用可能なImageProducer
        関連項目:
        ImageProducergetSnapshot()
      • createGraphics

        public abstract Graphics2D createGraphics()
        このVolatileImageに描画するために使用できるGraphics2Dを作成します。
        戻り値:
        このイメージへの描画に使用されるGraphics2D
      • validate

        public abstract int validate​(GraphicsConfiguration gc)
        最後のvalidate呼出し以降にイメージの描画表面が失われている場合、その描画表面を復元します。 さらにこのイメージを指定されたGraphicsConfigurationパラメータに対して検証し、このイメージからGraphicsConfigurationへの操作が互換性を持つかどうかを確認します。 互換性を持たない組み合わせが考えられるのは、VolatileImageオブジェクトがあるグラフィック・デバイス上で生成され、別のグラフィック・デバイス上で描画に使用されるような場合です。 VolatileImageオブジェクトはデバイス固有のものとなる傾向が強いので、このような場合では意図したとおりに動作しない可能性があり、このvalidate呼出しの戻り値でこの不整合が通知されます。 gcに対する値がnullの場合、あるいは不正な場合は、validateから不正な値が返され、あとで描画についての問題が発生する可能性があります。
        パラメータ:
        gc - このイメージに対して検証されるGraphicsConfigurationオブジェクト。 gcがnullの場合、検証メソッドの互換テストがスキップされる
        戻り値:
        イメージが検証不要の場合はIMAGE_OK
        イメージの復元が必要な場合はIMAGE_RESTORED
        イメージの復元を行った場合は、内容に影響しているため、イメージの再描画が必要な可能性がある。
        イメージがvalidateメソッドに渡されたGraphicsConfigurationオブジェクトと互換性がない場合はIMAGE_INCOMPATIBLE
        この場合、このGraphicsConfigurationで正常に使用可能なイメージを得るため、新しいComponentまたはGraphicsConfigurationを使用して、イメージの再作成が必要になる。 互換性のないイメージについては、復元が必要かどうかのチェックは実行されず、IMAGE_INCOMPATIBLEが戻された後もイメージの状態は変更されない。イメージの復元が必要かどうかはこの戻り値では判断できない。
        関連項目:
        GraphicsConfiguration, Component, IMAGE_OK, IMAGE_RESTORED, IMAGE_INCOMPATIBLE
      • contentsLost

        public abstract boolean contentsLost()
        最後のvalidate呼出し以降に描画データが失われている場合はtrue このメソッドはイメージに関連する一連の描画処理の最後に、アプリケーションから呼び出され、イメージの検証、再描画が必要かどうかを確認します。
        戻り値:
        描画表面の復元が必要な場合はtrue、そうでない場合はfalse
      • getCapabilities

        public abstract ImageCapabilities getCapabilities()
        このVolatileImageの固有の機能を照会できるImageCapabilitiesオブジェクトを返します。 プログラマが、生成した特定のVolatileImageオブジェクトの、より詳細な情報を取得できるようになります。 たとえばユーザーがVolatileImageを生成する時に、そのサイズのイメージを生成するための空き領域がビデオ・メモリーに残っていない場合、生成されるオブジェクトはVolatileImageですが、このプラットフォームのほかのプラットフォームに比べるとパフォーマンスが落ちる可能性があります。 この問題を解決するためには、メモリーに関する情報が必要になります。
        戻り値:
        このVolatileImageの機能についての情報を持つImageCapabilitiesオブジェクト。
        導入されたバージョン:
        1.4