クラス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());

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

導入されたバージョン:
1.4
  • フィールドのサマリー

    フィールド
    修飾子と型
    フィールド
    説明
    static final int
    検証イメージは渡されたGraphicsConfigurationオブジェクトと互換性がないため、適切な再生成が必要です。
    static final int
    検証イメージはそのまま使用可能です。
    static final int
    検証イメージは復元され、使用可能になっています。
    protected int
    このイメージの作成に使用された透明度の値です。

    クラス Imageで宣言されたフィールド

    accelerationPriority, SCALE_AREA_AVERAGING, SCALE_DEFAULT, SCALE_FAST, SCALE_REPLICATE, SCALE_SMOOTH, UndefinedProperty
    修飾子と型
    フィールド
    説明
    protected float
    このイメージの高速化の優先順位。
    static final int
    Area Averagingイメージ・スケーリング・アルゴリズムを使用します。
    static final int
    デフォルトのイメージ・スケーリング・アルゴリズムを使用します。
    static final int
    スケーリング後のイメージの滑らかさよりもスケーリング速度に高い優先順位を与えるイメージ・スケーリング・アルゴリズムを選択します。
    static final int
    ReplicateScaleFilterクラスで具体化されたイメージ・スケーリング・アルゴリズムを使用します。
    static final int
    スケーリング速度よりもイメージの滑らかさに高い優先順位を与えるイメージ・スケーリング・アルゴリズムを選択します。
    static final Object
    特定のイメージに対して定義されていないプロパティが取得された場合は常に、UndefinedPropertyオブジェクトを返すようにしてください。

    インタフェース透過性で宣言されたフィールド

    BITMASK, OPAQUE, TRANSLUCENT
    修飾子と型
    フィールド
    説明
    static final int
    完全に不透明(アルファ値が1.0)である、あるいは完全に透明(アルファ値が0.0)であることが保証されるイメージ・データを表現します。
    static final int
    完全に不透明であることが保証される(すべてのピクセルのアルファ値が1.0)イメージ・データを表現します。
    static final int
    任意のアルファ値(0.0 - 1.0、0.0と1.0を含む)を持っている、あるいは持つ可能性のあるイメージ・データを表現します。
  • コンストラクタのサマリー

    コンストラクタ
    修飾子
    コンストラクタ
    説明
    protected
    サブクラスが呼び出すためのコンストラクタ。
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    abstract boolean
    最後のvalidate呼出し以降に描画データが失われている場合はtrue
    abstract Graphics2D
    このVolatileImageに描画するために使用できるGraphics2Dを作成します。
    このVolatileImageの固有の機能を照会できるImageCapabilitiesオブジェクトを返します。
    このメソッドはGraphics2Dを返しますが、ここでは下位互換性のために提供されます。
    abstract int
    VolatileImageの高さを返します。
    abstract BufferedImage
    このオブジェクトの静的なスナップショット・イメージを返します。
    このVolatileImageのImageProducerを返します。
    int
    透明度を返します。
    abstract int
    VolatileImageの幅を返します。
    abstract int
    最後のvalidate呼出し以降にイメージの描画表面が失われている場合、その描画表面を復元します。

    クラス Imageで宣言されたメソッド

    flush, getAccelerationPriority, getCapabilities, getHeight, getProperty, getScaledInstance, getWidth, setAccelerationPriority
    修飾子と型
    メソッド
    説明
    void
    Imageオブジェクトに使用されている再構築可能なすべてのリソースを解放します。
    float
    高速化の優先順位のヒントの現在の値を返します。
    指定されたGraphicsConfigurationのこのイメージの機能を照会できるImageCapabilitiesオブジェクトを返します。
    abstract int
    イメージの高さを指定します。
    abstract Object
    getProperty(String name, ImageObserver observer)
    このイメージのプロパティを名前で返します。
    getScaledInstance(int width, int height, int hints)
    このイメージのスケーリング・バージョンを作成します。
    abstract int
    イメージの幅を指定します。
    void
    setAccelerationPriority(float priority)
    このイメージの高速化の重要性に関するヒントを設定します。

    クラスオブジェクトで宣言されたメソッド

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    修飾子と型
    メソッド
    説明
    protected Object
    このオブジェクトのコピーを作成して、返します。
    boolean
    このオブジェクトと他のオブジェクトが等しいかどうかを示します。
    protected void
    削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。
    最終決定は非推奨であり、将来のリリースで削除される可能性があります。
    final Class<?>
    このObjectの実行時クラスを返します。
    int
    このオブジェクトに対するハッシュ・コード値を返します。
    final void
    このオブジェクトのモニターで待機中のスレッドを1つ再開します。
    final void
    このオブジェクトのモニターで待機中のすべてのスレッドを再開します。
    オブジェクトの文字列表現を返します。
    final void
    現在のスレッドが目覚めるまで待機します。通常、notifiedまたはinterruptedです。
    final void
    wait(long timeoutMillis)
    現在のスレッドは、通常、notifiedまたはinterruptedであるか、一定のリアルタイムが経過するまで、目覚めるまで待機します。
    final void
    wait(long timeoutMillis, int nanos)
    現在のスレッドは、通常、notifiedまたはinterruptedであるか、一定のリアルタイムが経過するまで、目覚めるまで待機します。
  • フィールド詳細

  • コンストラクタの詳細

    • 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オブジェクトは描画操作、画面またはほかのVolatileImageオブジェクトへのイメージ書込み用に最適化されており、イメージのピクセル読込み機能は重視されていません。 したがってgetSourceのような操作では、ピクセル読込みに重点が置かれない操作よりもパフォーマンスが落ちます。 イメージから読み込まれるピクセル値は、取得された時点の内容だけを反映したものです。 このメソッドは要求された時点のイメージのスナップショットを取得します。返されるImageProducerオブジェクトは静的なスナップショット・イメージであり、オリジナルのVolatileImageではありません。 getSource()を呼び出すと、getSnapshot().getSource()を呼び出した場合と同じ結果が得られます。
      定義:
      getSource、クラスImage
      戻り値:
      このイメージのBufferedImage表現のピクセル生成に使用可能なImageProducer
      関連項目:
    • getGraphics

      public Graphics getGraphics()
      このメソッドはGraphics2Dを返しますが、ここでは下位互換のために提供されます。Graphics2Dを返すように宣言されているため、createGraphicsの方が便利です。
      定義:
      getGraphics、クラスImage
      戻り値:
      このイメージへの描画に使用できるGraphics2D
      関連項目:
    • 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が戻された後もイメージの状態は変更されない。イメージの復元が必要かどうかはこの戻り値では判断できない。
      関連項目:
    • contentsLost

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

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

      public int getTransparency()
      透明度を返します。 OPAQUE、BITMASK、TRANSLUCENTのいずれかを返します。
      定義:
      getTransparency、インタフェースTransparency
      戻り値:
      このVolatileImageの透明度。
      導入されたバージョン:
      1.5
      関連項目: