- すべての実装されたインタフェース:
Transparency
イメージの描画表面(イメージの内容が実際に常駐するメモリー領域)は、そのメモリーの内容が他に移動することによって失われるか、無効化される可能性があります。 したがって描画表面を復元または再生成し、その描画表面の内容を再描画する必要があります。 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
このイメージの作成に使用された透明度の値です。クラス java.awt.Imageで宣言されたフィールド
accelerationPriority, SCALE_AREA_AVERAGING, SCALE_DEFAULT, SCALE_FAST, SCALE_REPLICATE, SCALE_SMOOTH, UndefinedProperty
インタフェース java.awt.Transparencyで宣言されたフィールド
BITMASK, OPAQUE, TRANSLUCENT
-
コンストラクタのサマリー
コンストラクタ -
メソッドのサマリー
修飾子と型メソッド説明abstract boolean
最後のvalidate
呼出し以降に描画データが失われている場合はtrue
。abstract Graphics2D
このVolatileImage
に描画するために使用できるGraphics2D
を作成します。abstract ImageCapabilities
このVolatileImageの固有の機能を照会できるImageCapabilitiesオブジェクトを返します。このメソッドはGraphics2D
を返しますが、ここでは下位互換性のために提供されます。abstract int
VolatileImage
の高さを返します。abstract BufferedImage
このオブジェクトの静的なスナップショット・イメージを返します。このVolatileImageのImageProducerを返します。int
透明度を返します。abstract int
getWidth()
VolatileImage
の幅を返します。abstract int
最後のvalidate
呼出し以降にイメージの描画表面が失われている場合、その描画表面を復元します。クラス java.awt.Imageで宣言されたメソッド
flush, getAccelerationPriority, getCapabilities, getHeight, getProperty, getScaledInstance, getWidth, setAccelerationPriority
-
フィールド詳細
-
IMAGE_OK
public static final int IMAGE_OK検証イメージはそのまま使用可能です。- 関連項目:
-
IMAGE_RESTORED
public static final int IMAGE_RESTORED検証イメージは復元され、使用可能になっています。 復元によってイメージの内容が失われていることに注意してください。- 関連項目:
-
IMAGE_INCOMPATIBLE
public static final int IMAGE_INCOMPATIBLE検証イメージは渡されたGraphicsConfiguration
オブジェクトと互換性がないため、適切な再生成が必要です。validate
からこの戻り値が返された時に、イメージをそのまま使用した場合の結果は予測できません。- 関連項目:
-
transparency
protected int transparencyこのイメージの作成に使用された透明度の値です。
-
-
コンストラクタの詳細
-
VolatileImage
protected VolatileImage()サブクラスが呼び出すためのコンストラクタ。
-
-
メソッドの詳細
-
getSnapshot
public abstract BufferedImage getSnapshot()このオブジェクトの静的なスナップショット・イメージを返します。 返されるBufferedImage
は、要求があった時点のVolatileImage
の内容だけを反映したものであり、それ以降にVolatileImage
が変更されても更新されません。- 戻り値:
- この
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()を呼び出した場合と同じ結果が得られます。- 定義:
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
- 関連項目:
-