public abstract class VolatileImage extends Image implements 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を、非同期コールバック通知のために記録する必要はありません。
| 修飾子と型 | フィールド | 説明 |
|---|---|---|
static int |
IMAGE_INCOMPATIBLE |
検証イメージは渡された
GraphicsConfigurationオブジェクトと互換性がないため、適切な再生成が必要です。 |
static int |
IMAGE_OK |
検証イメージはそのまま使用可能です。
|
static int |
IMAGE_RESTORED |
検証イメージは復元され、使用可能になっています。
|
protected int |
transparency |
このイメージの作成に使用された透明度の値です。
|
accelerationPriority, SCALE_AREA_AVERAGING, SCALE_DEFAULT, SCALE_FAST, SCALE_REPLICATE, SCALE_SMOOTH, UndefinedPropertyBITMASK, OPAQUE, TRANSLUCENT| コンストラクタ | 説明 |
|---|---|
VolatileImage() |
| 修飾子と型 | メソッド | 説明 |
|---|---|---|
abstract boolean |
contentsLost() |
最後の
validate呼出し以降に描画データが失われている場合はtrue。 |
abstract Graphics2D |
createGraphics() |
この
VolatileImageに描画するために使用できるGraphics2Dを作成します。 |
abstract ImageCapabilities |
getCapabilities() |
このVolatileImageの固有の機能を照会できるImageCapabilitiesオブジェクトを返します。
|
Graphics |
getGraphics() |
このメソッドは
Graphics2Dを返しますが、ここでは下位互換性のために提供されます。 |
abstract int |
getHeight() |
VolatileImageの高さを返します。 |
abstract BufferedImage |
getSnapshot() |
このオブジェクトの静的なスナップショット・イメージを返します。
|
ImageProducer |
getSource() |
このVolatileImageのImageProducerを返します。
|
int |
getTransparency() |
透明度を返します。
|
abstract int |
getWidth() |
VolatileImageの幅を返します。 |
abstract int |
validate(GraphicsConfiguration gc) |
最後の
validate呼出し以降にイメージの描画表面が失われている場合、その描画表面を復元します。 |
flush, getAccelerationPriority, getCapabilities, getHeight, getProperty, getScaledInstance, getWidth, setAccelerationPrioritypublic static final int IMAGE_OK
public static final int IMAGE_RESTORED
public static final int IMAGE_INCOMPATIBLE
GraphicsConfigurationオブジェクトと互換性がないため、適切な再生成が必要です。 validateからこの戻り値が返された時に、イメージをそのまま使用した場合の結果は予測できません。 protected int transparency
public abstract BufferedImage getSnapshot()
BufferedImageは、要求があった時点のVolatileImageの内容だけを反映したものであり、それ以降にVolatileImageが変更されても更新されません。 VolatileImageのBufferedImage表現BufferedImagepublic abstract int getWidth()
VolatileImageの幅を返します。VolatileImageの幅。public abstract int getHeight()
VolatileImageの高さを返します。VolatileImageの高さ。public ImageProducer getSource()
getSourceのような操作では、ピクセル読込みに重点が置かれない操作よりもパフォーマンスが落ちます。 イメージから読み込まれるピクセル値は、取得された時点の内容だけを反映したものです。 このメソッドは要求された時点のイメージのスナップショットを取得します。返されるImageProducerオブジェクトは静的なスナップショット・イメージであり、オリジナルのVolatileImageではありません。 getSource()を呼び出すと、getSnapshot().getSource()を呼び出した場合と同じ結果が得られます。 getSource、クラスImageBufferedImage表現のピクセル生成に使用可能なImageProducer。ImageProducer、getSnapshot()public Graphics getGraphics()
Graphics2Dを返しますが、ここでは下位互換のために提供されます。Graphics2Dを返すように宣言されているため、createGraphicsの方が便利です。getGraphics、クラスImageGraphics2D。Graphics、Component.createImage(int, int)public abstract Graphics2D createGraphics()
VolatileImageに描画するために使用できるGraphics2Dを作成します。Graphics2D。public abstract int validate(GraphicsConfiguration gc)
validate呼出し以降にイメージの描画表面が失われている場合、その描画表面を復元します。 さらにこのイメージを指定されたGraphicsConfigurationパラメータに対して検証し、このイメージからGraphicsConfigurationへの操作が互換性を持つかどうかを確認します。 互換性を持たない組み合わせが考えられるのは、VolatileImageオブジェクトがあるグラフィック・デバイス上で生成され、別のグラフィック・デバイス上で描画に使用されるような場合です。 VolatileImageオブジェクトはデバイス固有のものとなる傾向が強いので、このような場合では意図したとおりに動作しない可能性があり、このvalidate呼出しの戻り値でこの不整合が通知されます。 gcに対する値がnullの場合、あるいは不正な場合は、validateから不正な値が返され、あとで描画についての問題が発生する可能性があります。 gc - このイメージに対して検証されるGraphicsConfigurationオブジェクト。 gcがnullの場合、検証メソッドの互換テストがスキップされる IMAGE_OKIMAGE_RESTORED。 イメージの復元を行った場合は、内容に影響しているため、イメージの再描画が必要な可能性がある。 validateメソッドに渡されたGraphicsConfigurationオブジェクトと互換性がない場合はIMAGE_INCOMPATIBLE。 この場合、このGraphicsConfigurationで正常に使用可能なイメージを得るため、新しいComponentまたはGraphicsConfigurationを使用して、イメージの再作成が必要になる。 互換性のないイメージについては、復元が必要かどうかのチェックは実行されず、IMAGE_INCOMPATIBLEが戻された後もイメージの状態は変更されない。イメージの復元が必要かどうかはこの戻り値では判断できない。 GraphicsConfiguration, Component, IMAGE_OK, IMAGE_RESTORED, IMAGE_INCOMPATIBLEpublic abstract boolean contentsLost()
validate呼出し以降に描画データが失われている場合はtrue。 このメソッドはイメージに関連する一連の描画処理の最後に、アプリケーションから呼び出され、イメージの検証、再描画が必要かどうかを確認します。 true、そうでない場合はfalse。public abstract ImageCapabilities getCapabilities()
VolatileImageの機能についての情報を持つImageCapabilitiesオブジェクト。public int getTransparency()
getTransparency、インタフェースTransparencyVolatileImageの透明度。Transparency.OPAQUE, Transparency.BITMASK, Transparency.TRANSLUCENT バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。 そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2025, Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Documentation Redistribution Policyも参照してください。