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());
请注意,此类的子类从Image
类,其包括采取方法ImageObserver
作为信息从一个潜在的接收到的参数为异步通知ImageProducer
。 由于这VolatileImage
不是从异步源加载,即采取的各种方法ImageObserver
参数的行为,如果数据已经被从所获得的作为ImageProducer
。 具体来说,这意味着来自这些方法的返回值将永远不会指示该信息尚不可用,并且在这种方法中使用的ImageObserver
将永远不需要被记录用于异步回调通知。
Modifier and Type | Field and Description |
---|---|
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, UndefinedProperty
BITMASK, OPAQUE, TRANSLUCENT
Constructor and Description |
---|
VolatileImage() |
Modifier and Type | Method and Description |
---|---|
abstract boolean |
contentsLost()
如果自最近
validate 调用以来,如果渲染数据丢失,则返回
true 。
|
abstract Graphics2D |
createGraphics()
创建一个
Graphics2D ,可以用来绘制这个
VolatileImage 。
|
abstract ImageCapabilities |
getCapabilities()
返回一个ImageCapabilities对象,可以查询该VolatileImage的具体功能。
|
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, setAccelerationPriority
public static final int IMAGE_OK
public static final int IMAGE_RESTORED
public static final int IMAGE_INCOMPATIBLE
GraphicsConfiguration
对象不兼容,并应根据需要重新创建。
从validate
收到此返回码后,图像按validate
是未定义的。
protected int transparency
public abstract BufferedImage getSnapshot()
BufferedImage
返回的只是当前的VolatileImage
在请求时,不会更新与任何将来的更改VolatileImage
。
BufferedImage
表示这个VolatileImage
BufferedImage
public abstract int getWidth()
VolatileImage
的宽度。
VolatileImage
。
public abstract int getHeight()
VolatileImage
的高度。
VolatileImage
的高度。
public ImageProducer getSource()
getSource
可能不如不依赖于读取像素的操作那样快。
还要注意,从图像读取的像素值与图像中的像素值仅在它们被检索时才是最新的。
此方法在创建请求时获取映像的快照,并且返回的ImageProducer对象可与该静态快照映像(不是原始的VolatileImage)配合使用。
调用getSource()相当于调用getSnapshot()。getSource()。
getSource
在
Image
类
ImageProducer
,可用于生成此图像的BufferedImage
表示的像素。
ImageProducer
, getSnapshot()
public Graphics getGraphics()
Graphics2D
,但此处为向后兼容性。
createGraphics
更方便,因为它被宣布返回Graphics2D
。
getGraphics
在
Image
类
Graphics2D
,可以用来绘制这个图像。
Graphics
, Component.createImage(int, int)
public abstract Graphics2D createGraphics()
Graphics2D
,可以用来绘制这个
VolatileImage
。
Graphics2D
,用于绘制这个图像。
public abstract int validate(GraphicsConfiguration gc)
validate
调用以来丢失,则尝试恢复图像的绘图面。
还可以根据给定的GraphicsConfiguration参数验证此映像,以查看从此映像到GraphicsConfiguration的操作是否兼容。
不兼容组合的示例可能是在一个图形设备上创建VolatileImage对象,然后用于呈现到其他图形设备的情况。
由于VolatileImage对象往往是非常具体的设备,因此此操作可能无法正常工作,因此来自此验证调用的返回代码将注意到不兼容。
gc的空值或不正确的值可能会导致从validate
返回不validate
值,并可能导致后续的渲染问题。
gc
- 要GraphicsConfiguration
此图像的GraphicsConfiguration
对象。
null gc意味着validate方法应该跳过兼容性测试。
IMAGE_OK
如果图像不需要验证
IMAGE_RESTORED
如果图像需要恢复。
恢复意味着图像的内容可能已经受到影响,并且可能需要重新渲染图像。
IMAGE_INCOMPATIBLE
如果图像与传递给validate
方法的GraphicsConfiguration
对象不validate
。
不相容性意味着图像可能需要使用新的Component
或GraphicsConfiguration
,以获得可以成功使用此GraphicsConfiguration
。
不检查不兼容的图像是否需要恢复,因此在返回值为IMAGE_INCOMPATIBLE之后图像的状态IMAGE_INCOMPATIBLE
,并且此返回值对于是否需要还原图像无关。
GraphicsConfiguration
, Component
, IMAGE_OK
, IMAGE_RESTORED
, IMAGE_INCOMPATIBLE
public abstract boolean contentsLost()
validate
调用以来,如果渲染数据丢失,则返回true
。
应该在应用程序的任何一系列渲染操作结束时从图像调用该方法,以查看图像是否需要被验证并且重现渲染。
true
如果绘图表面需要恢复;
false
否则。
public abstract ImageCapabilities getCapabilities()
ImageCapabilities
对象包含此的能力
VolatileImage
。
public int getTransparency()
getTransparency
在接口
Transparency
VolatileImage
。
Transparency.OPAQUE
,
Transparency.BITMASK
,
Transparency.TRANSLUCENT