- 所有已实现的接口:
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。
- 自从:
- 1.4
-
字段摘要
字段修饰符和类型Field描述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创建一个Graphics2D,可用于绘制此VolatileImage。abstract ImageCapabilities返回一个 ImageCapabilities 对象,可以查询此 VolatileImage 的特定功能。此方法返回Graphics2D,但此处是为了向后兼容。abstract int返回VolatileImage的高度。abstract BufferedImage返回此对象的静态快照图像。这将返回此 VolatileImage 的 ImageProducer。int返回透明度。abstract intgetWidth()返回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创建此图像的透明度值。- 自从:
- 1.5
- 参见:
-
-
构造方法详细信息
-
VolatileImage
protected VolatileImage()子类调用的构造方法。
-
-
方法详情
-
getSnapshot
返回此对象的静态快照图像。返回的BufferedImage仅与请求时的VolatileImage一致,不会随VolatileImage的任何未来更改而更新。- 返回:
-
这个
VolatileImage的BufferedImage表示 - 参见:
-
getWidth
public abstract int getWidth()返回VolatileImage的宽度。- 返回:
-
这个
VolatileImage的宽度。
-
getHeight
public abstract int getHeight()返回VolatileImage的高度。- 返回:
-
这个
VolatileImage的高度。
-
getSource
这将返回此 VolatileImage 的 ImageProducer。请注意,VolatileImage 对象针对渲染操作和 blitting 到屏幕或其他 VolatileImage 对象进行了优化,而不是读回图像的像素。因此,getSource等操作的执行速度可能不如不依赖读取像素的操作快。还要注意,从图像中读取的像素值仅在它们被检索时才与图像中的像素值一致。此方法在发出请求时获取图像的快照,返回的 ImageProducer 对象使用该静态快照图像,而不是原始的 VolatileImage。调用 getSource() 等同于调用 getSnapshot().getSource()。- 指定者:
getSource在类Image中- 返回:
ImageProducer可用于为该图像的BufferedImage表示生成像素。- 参见:
-
getGraphics
- 指定者:
getGraphics在类Image中- 返回:
Graphics2D,可用于绘制此图像。- 参见:
-
createGraphics
创建一个Graphics2D,可用于绘制此VolatileImage。- 返回:
-
a
Graphics2D,用于绘制此图像。
-
validate
如果表面在上次validate调用后丢失,则尝试恢复图像的绘图表面。还根据给定的 GraphicsConfiguration 参数验证此图像,以查看从此图像到 GraphicsConfiguration 的操作是否兼容。不兼容组合的一个示例可能是在一个图形设备上创建 VolatileImage 对象然后用于呈现到不同图形设备的情况。由于 VolatileImage 对象往往是非常特定于设备的,因此此操作可能无法按预期工作,因此此验证调用的返回代码会指出不兼容。 gc 的空值或不正确的值可能会导致从validate返回不正确的值,并可能导致以后的渲染问题。- 参数:
gc- 用于验证此图像的GraphicsConfiguration对象。空 gc 意味着验证方法应该跳过兼容性测试。- 返回:
IMAGE_OK如果图像不需要验证IMAGE_RESTORED如果图像需要修复。恢复意味着图像的内容可能已经受到影响,图像可能需要重新渲染。IMAGE_INCOMPATIBLE如果图像与传递给validate方法的GraphicsConfiguration对象不兼容。不兼容意味着可能需要使用新的Component或GraphicsConfiguration重新创建图像,以便获得可与此GraphicsConfiguration成功使用的图像。不检查不兼容的图像是否需要恢复,因此图像的状态在IMAGE_INCOMPATIBLE返回值后保持不变,并且此返回值不暗示图像是否需要恢复。- 参见:
-
contentsLost
public abstract boolean contentsLost()如果渲染数据自上次validate调用后丢失,则返回true。应用程序应在对图像进行任何一系列渲染操作结束时调用此方法,以查看是否需要验证图像并重做渲染。- 返回:
true如果绘图表面需要恢复;false否则。
-
getCapabilities
返回一个 ImageCapabilities 对象,可以查询此 VolatileImage 的特定功能。这将允许程序员找到有关他们创建的特定 VolatileImage 对象的更多运行时信息。例如,用户可能创建了一个 VolatileImage,但系统可能没有剩余视频内存来创建该大小的图像,因此尽管该对象是一个 VolatileImage,但它的加速不如该平台上的其他 VolatileImage 对象。用户可能需要该信息来找到解决他们问题的其他方法。- 返回:
-
包含此
VolatileImage功能的ImageCapabilities对象。 - 自从:
- 1.4
-
getTransparency
public int getTransparency()返回透明度。返回 OPAQUE、BITMASK 或 TRANSLUCENT。- 指定者:
getTransparency在接口Transparency中- 返回:
-
这个
VolatileImage的透明度。 - 自从:
- 1.5
- 参见:
-