java.lang.Object java.awt.Image java.awt.image.VolatileImage
public abstract class VolatileImage
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());
注意,此类是从 Image
类创建的子类,Image
类包含带有 ImageObserver
参数的方法,用于从潜在 ImageProducer
收到信息时的异步通知。由于此 VolatileImage
不是从异步源加载的,因此带有 ImageObserver
参数的不同方法的行为就好像已经从 ImageProducer
中获得了数据。明确地说,这意味着这些方法的返回值永远不会指示信息尚不可用,并且永远不需要为了异步回调通知而记录这些方法中使用的 ImageObserver
。
字段摘要 | |
---|---|
static int |
IMAGE_INCOMPATIBLE 经验证的图像与提供的 GraphicsConfiguration 对象不兼容,应该重新创建适当的图像。 |
static int |
IMAGE_OK 经验证的图像准备按原样使用。 |
static int |
IMAGE_RESTORED 经验证的图像已经被恢复并准备使用。 |
protected int |
transparency 创建此图像所使用的透明度值。 |
从类 java.awt.Image 继承的字段 |
---|
accelerationPriority, SCALE_AREA_AVERAGING, SCALE_DEFAULT, SCALE_FAST, SCALE_REPLICATE, SCALE_SMOOTH, UndefinedProperty |
从接口 java.awt.Transparency 继承的字段 |
---|
BITMASK, OPAQUE, TRANSLUCENT |
构造方法摘要 | |
---|---|
VolatileImage() |
方法摘要 | |
---|---|
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 后绘制表面丢失,则试图恢复图像的绘制表面。 |
从类 java.awt.Image 继承的方法 |
---|
flush, getAccelerationPriority, getCapabilities, getHeight, getProperty, getScaledInstance, getWidth, setAccelerationPriority |
从类 java.lang.Object 继承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
字段详细信息 |
---|
public static final int IMAGE_OK
public static final int IMAGE_RESTORED
public static final int IMAGE_INCOMPATIBLE
GraphicsConfiguration
对象不兼容,应该重新创建适当的图像。从
validate
收到此返回代码后按原样使用图像的行为是不明确的。
protected int transparency
构造方法详细信息 |
---|
public VolatileImage()
方法详细信息 |
---|
public abstract BufferedImage getSnapshot()
BufferedImage
仅与请求时刻的
VolatileImage
保持一致,不随
VolatileImage
未来的更改而更新。
VolatileImage
的
BufferedImage
表示形式
BufferedImage
public abstract int getWidth()
VolatileImage
的宽度。
VolatileImage
的宽度。
public abstract int getHeight()
VolatileImage
的高度。
VolatileImage
的高度。
public ImageProducer getSource()
getSource
这类操作的执行速度可能不如不依赖读取像素的那些操作。同样要注意,从图像读取的像素值只与获取时图像的像素值保持一致。此方法在作出请求时拍下图像的快照,返回的 ImageProducer 对象使用该静态快照,而不是原始的 VolatileImage 进行工作。调用 getSource() 等效于调用 getSnapshot().getSource()。
ImageProducer
,它可以为此 Image 的
BufferedImage
表示形式生成像素。
ImageProducer
,
getSnapshot()
public Graphics getGraphics()
Graphics2D
,但它存在于此处是出于向后兼容性的考虑。
createGraphics
更为方便,因为它被声明为返回
Graphics2D
。
Image
中的
getGraphics
Graphics2D
,可以将它绘制到此图像中。
Graphics
,
Component.createImage(int, int)
public abstract Graphics2D createGraphics()
Graphics2D
,可以将它绘制到此
VolatileImage
中。
Graphics2D
,用于绘制到此图像中。
public abstract int validate(GraphicsConfiguration gc)
validate
后绘制表面丢失,则试图恢复图像的绘制表面。还要依靠给定的 GraphicsConfiguration 参数验证此图像,即查看从此图像到 GraphicsConfiguration 的操作是否兼容。以下情形就是一个不兼容组合的例子:VolatileImage 对象在一个图形设备上创建,然后在另一个不同的图形设备上呈现。由于 VolatileImage 对象与设备特别相关,此操作可能不会按预期进行,因此调用此 validate 返回的代码将记录这种不兼容性。null 或不正确的 gc 值可能引起
validate
返回不正确的值,随后可能引起呈现问题。
gc
- 一个
GraphicsConfiguration
对象,图像依靠此对象进行验证。gc 为 null 意味着 validate 方法应该跳过兼容性测试。
IMAGE_OK
。
IMAGE_RESTORED
。恢复意味着图像内容可能已受到影响,并且图像可能需要重新呈现。
validate
方法的
GraphicsConfiguration
对象不兼容,则返回
IMAGE_INCOMPATIBLE
。不兼容意味着图像可能需要用新的
Component
或
GraphicsConfiguration
重新创建,以获得一个能够用此
GraphicsConfiguration
成功使用的图像。不兼容的图像不会检查是否需要恢复,因此在
IMAGE_INCOMPATIBLE
值返回后图像的状态不变,这个返回值与图像是否需要恢复无关。
GraphicsConfiguration
,
Component
,
IMAGE_OK
,
IMAGE_RESTORED
,
IMAGE_INCOMPATIBLE
public abstract boolean contentsLost()
validate
后呈现数据丢失,则返回
true
。在对图像进行的任何系列呈现操作的结尾,应用程序应该调用此方法,以查看图像是否需要验证和重新呈现。
true
;否则返回
false
。
public abstract ImageCapabilities getCapabilities()
VolatileImage
的功能的
ImageCapabilities
对象。
public int getTransparency()
Transparency
中的
getTransparency
VolatileImage
的透明度。
Transparency.OPAQUE
,
Transparency.BITMASK
,
Transparency.TRANSLUCENT