- 所有已实现的接口:
-
透明性
图像的绘制表面(实际存储图像内容的内存)可能会丢失或无效,导致该内存的内容消失。因此,需要恢复或重新创建绘图表面,并重新呈现该表面的内容。VolatileImage提供了一个接口,允许用户在发生这些问题时检测并修复它们。
创建VolatileImage对象时,可能会分配有限的系统资源,例如视频内存(VRAM)以支持图像。当不再使用VolatileImage对象时,它可能会被垃圾回收,并且这些系统资源将被释放,但这个过程不会在保证的时间发生。创建许多VolatileImage对象的应用程序(例如,调整大小的窗口可能会在大小更改时强制重新创建其后备缓冲区)可能会耗尽新VolatileImage对象的最佳系统资源,仅仅因为旧对象尚未从系统中删除。 (仍然可以创建新的VolatileImage对象,但它们可能不像在加速内存中创建的那样表现良好)。可以随时调用flush方法主动释放VolatileImage使用的资源,以便它不会阻止后续VolatileImage对象被加速。通过这种方式,应用程序可以更好地控制被过时的VolatileImage对象占用的资源状态。
不应直接对此图像进行子类化,而应使用Component.createVolatileImage
或GraphicsConfiguration.createCompatibleVolatileImage(int, int)
方法来创建它。
以下是使用VolatileImage对象的示例:
// 创建图像 VolatileImage vImg = createVolatileImage(w, h); // 渲染到图像 void renderOffscreen() { do { if (vImg.validate(getGraphicsConfiguration()) == VolatileImage.IMAGE_INCOMPATIBLE) { // 旧vImg与新GraphicsConfig不兼容;重新创建它 vImg = createVolatileImage(w, h); } Graphics2D g = vImg.createGraphics(); // // 其他渲染命令... // g.dispose(); } while (vImg.contentsLost()); } // 从图像复制(这里,gScreen是用于屏幕窗口的Graphics对象) do { int returnCode = vImg.validate(getGraphicsConfiguration()); if (returnCode == VolatileImage.IMAGE_RESTORED) { // 需要恢复内容 renderOffscreen(); // 恢复内容 } else if (returnCode == VolatileImage.IMAGE_INCOMPATIBLE) { // 旧vImg与新GraphicsConfig不兼容;重新创建它 vImg = createVolatileImage(w, h); renderOffscreen(); } gScreen.drawImage(vImg, 0, 0, this); } while (vImg.contentsLost());
请注意,此类从Image
类继承,该类包括采用ImageObserver
参数进行异步通知的方法,因为从潜在ImageProducer
接收到信息时。由于此VolatileImage
不是从异步源加载的,因此采用采用ImageObserver
参数的各种方法将表现为数据已经从ImageProducer
获取。具体来说,这意味着这些方法的返回值永远不会指示信息尚不可用,并且在这些方法中使用的ImageObserver
永远不需要记录用于异步回调通知。
- 自1.4版本起:
- 1.4
-
Field Summary
Modifier and TypeFieldDescriptionstatic final int
验证的图像与提供的GraphicsConfiguration
对象不兼容,应根据需要重新创建。static final int
验证的图像已准备就绪,可以直接使用。static final int
验证的图像已恢复,现在可以使用。protected int
创建此图像时使用的透明度值。Fields declared in class java.awt.Image
accelerationPriority, SCALE_AREA_AVERAGING, SCALE_DEFAULT, SCALE_FAST, SCALE_REPLICATE, SCALE_SMOOTH, UndefinedProperty
Fields declared in interface java.awt.Transparency
BITMASK, OPAQUE, TRANSLUCENT
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionabstract boolean
如果自上次validate
调用以来丢失了渲染数据,则返回true
。abstract Graphics2D
创建一个Graphics2D
,可用于绘制到此VolatileImage
中。abstract ImageCapabilities
返回一个ImageCapabilities对象,可以查询此VolatileImage的特定功能。此方法返回一个Graphics2D
,但这里是为了向后兼容性。abstract int
返回VolatileImage
的高度。abstract BufferedImage
返回此对象的静态快照图像。为此VolatileImage返回一个ImageProducer。int
返回透明度。abstract int
getWidth()
返回VolatileImage
的宽度。abstract int
尝试恢复图像的绘图表面,如果自上次validate
调用以来表面已丢失。Methods declared in class java.awt.Image
flush, getAccelerationPriority, getCapabilities, getHeight, getProperty, getScaledInstance, getWidth, setAccelerationPriority
-
Field Details
-
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版本起:
- 1.5
- 参见:
-
-
Constructor Details
-
VolatileImage
protected VolatileImage()子类调用的构造函数。
-
-
Method Details
-
getSnapshot
返回此对象的静态快照图像。返回的BufferedImage
仅在请求时与VolatileImage
当前状态一致,并不会随着VolatileImage
的未来更改而更新。- 返回:
-
此
VolatileImage
的BufferedImage
表示 - 参见:
-
getWidth
public abstract int getWidth()返回VolatileImage
的宽度。- 返回:
-
此
VolatileImage
的宽度。
-
getHeight
public abstract int getHeight()返回VolatileImage
的高度。- 返回:
-
此
VolatileImage
的高度。
-
getSource
为此VolatileImage返回一个ImageProducer。请注意,VolatileImage对象针对渲染操作和将图像传输到屏幕或其他VolatileImage对象进行了优化,而不是读取图像的像素。因此,像getSource
这样的操作可能不像不依赖于读取像素的操作那样快。还要注意,从图像读取的像素值仅在检索时与图像中的像素一致。此方法在请求时获取图像的快照,并且返回的ImageProducer对象与该静态快照图像一起工作,而不是原始VolatileImage。调用getSource()等同于调用getSnapshot().getSource()。- 指定者:
-
getSource
在类Image
中 - 返回:
-
一个
ImageProducer
,可用于生成BufferedImage
表示的像素 - 参见:
-
getGraphics
- 指定者:
-
getGraphics
在类Image
中 - 返回:
-
一个
Graphics2D
,可用于绘制到此图像中。 - 参见:
-
createGraphics
创建一个Graphics2D
,可用于绘制到此VolatileImage
中。- 返回:
-
一个用于绘制到此图像中的
Graphics2D
-
validate
尝试恢复图像的绘图表面,如果自上次validate
调用以来表面已丢失。还根据给定的GraphicsConfiguration参数验证此图像,以查看从此图像到GraphicsConfiguration的操作是否兼容。不兼容组合的一个例子可能是这样一种情况:VolatileImage对象在一个图形设备上创建,然后用于在不同的图形设备上渲染。由于VolatileImage对象往往是非常特定于设备的,因此此操作可能无法按预期工作,因此此validate调用的返回代码将指出不兼容性。对于gc的空值或不正确值可能导致从validate
返回不正确的值,并可能导致后续渲染出现问题。- 参数:
-
gc
- 用于验证此图像的GraphicsConfiguration
对象。空的gc意味着validate方法应跳过兼容性测试。 - 返回:
-
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
- 参见:
-