- java.lang.Object
-
- java.awt.Image
-
- java.awt.image.VolatileImage
-
- All Implemented Interfaces:
-
Transparency
public abstract class VolatileImage extends Image implements Transparency
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
类中的子类,其中包括从可能的ImageProducer
接收到的信息的异步通知中使用ImageObserver
参数的方法。 由于VolatileImage
未从异步源加载,所以采用ImageObserver
参数的各种方法将表现为已从ImageProducer
获取的ImageProducer
。 具体来说,这意味着这些方法的返回值永远不会指示信息不可用,并且这种方法中使用的ImageObserver
将永远不需要记录异步回调通知。- 从以下版本开始:
- 1.4
-
-
Field Summary
Fields Modifier and Type Field 描述 static int
IMAGE_INCOMPATIBLE
验证的图像与提供的GraphicsConfiguration
对象不兼容,并应根据需要重新创建。static int
IMAGE_OK
经过验证的图像可以按原样使用。static int
IMAGE_RESTORED
已验证的图像已恢复,现在可以使用。protected int
transparency
创建此图像的透明度值。-
Fields inherited from class java.awt.Image
accelerationPriority, SCALE_AREA_AVERAGING, SCALE_DEFAULT, SCALE_FAST, SCALE_REPLICATE, SCALE_SMOOTH, UndefinedProperty
-
Fields inherited from interface java.awt.Transparency
BITMASK, OPAQUE, TRANSLUCENT
-
-
构造方法摘要
构造方法 Constructor 描述 VolatileImage()
-
方法摘要
所有方法 接口方法 抽象方法 具体的方法 Modifier and Type 方法 描述 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
调用以来表面已经丢失,则尝试恢复图像的绘图面。-
Methods inherited from class java.awt.Image
flush, getAccelerationPriority, getCapabilities, getHeight, getProperty, getScaledInstance, getWidth, setAccelerationPriority
-
-
-
-
字段详细信息
-
IMAGE_OK
public static final int IMAGE_OK
经过验证的图像可以按原样使用。- 另请参见:
- Constant Field Values
-
IMAGE_RESTORED
public static final int IMAGE_RESTORED
已验证的图像已恢复,现在可以使用。 请注意,恢复会导致图像内容丢失。- 另请参见:
- Constant Field Values
-
IMAGE_INCOMPATIBLE
public static final int IMAGE_INCOMPATIBLE
验证的图像与提供的GraphicsConfiguration
对象不兼容,并应根据需要重新创建。 从validate
收到此返回码后,图像按validate
是未定义的。- 另请参见:
- Constant Field Values
-
transparency
protected int transparency
创建此图像的透明度值。
-
-
方法详细信息
-
getSnapshot
public abstract BufferedImage getSnapshot()
返回此对象的静态快照图像。BufferedImage
返回的只是当前的VolatileImage
当前的请求,并将不会更新与任何将来的更改VolatileImage
。- 结果
-
一个
BufferedImage
这个VolatileImage
表示 - 另请参见:
-
BufferedImage
-
getWidth
public abstract int getWidth()
返回VolatileImage
的宽度。- 结果
-
该宽度为
VolatileImage
。
-
getHeight
public abstract int getHeight()
返回VolatileImage
的高度。- 结果
-
的高度这
VolatileImage
。
-
getSource
public ImageProducer getSource()
这将为此VolatileImage返回ImageProducer。 请注意,VolatileImage对象针对渲染操作进行了优化,并将其划分到屏幕或其他VolatileImage对象上,而不是读取图像的像素。 因此,诸如getSource
操作可能不像不依赖于读取像素的操作那样快。 还要注意,从图像读取的像素值与图像中的像素值仅在它们被检索时才是最新的。 此方法在创建请求时获取映像的快照,并且返回的ImageProducer对象与静态快照映像(不是原始的VolatileImage)配合使用。 调用getSource()相当于调用getSnapshot()。getSource()。- Specified by:
-
getSource
中的Image
- 结果
-
一个
ImageProducer
,可用于生成此图像的BufferedImage
表示的像素。 - 另请参见:
-
ImageProducer
,getSnapshot()
-
getGraphics
public Graphics getGraphics()
此方法返回一个Graphics2D
,但这里是向后兼容性。createGraphics
更方便,因为它被声明返回一个Graphics2D
。- Specified by:
-
getGraphics
中的Image
- 结果
-
一个
Graphics2D
,可以用来绘制这个图像。 - 另请参见:
-
Graphics
,Component.createImage(int, int)
-
createGraphics
public abstract Graphics2D createGraphics()
创建一个Graphics2D
,可以用来绘制这个VolatileImage
。- 结果
-
一个
Graphics2D
,用于绘制这个图像。
-
validate
public abstract int validate(GraphicsConfiguration gc)
如果自上一次validate
调用以来曲面已经丢失,则尝试恢复图像的绘图面。 还可以根据给定的GraphicsConfiguration参数验证此映像,以查看从此映像到GraphicsConfiguration的操作是否兼容。 不兼容组合的示例可能是在一个图形设备上创建了VolatileImage对象,然后用于呈现到其他图形设备的情况。 由于VolatileImage对象往往是非常具体的设备,因此此操作可能无法正常工作,因此来自此验证调用的返回代码将注意到不兼容。 gc的空值或不正确的值可能会导致从validate
返回错误的值,并可能导致后续的渲染问题。- 参数
-
gc
- 要验证此图像的GraphicsConfiguration
对象。 null gc意味着validate方法应该跳过兼容性测试。 - 结果
-
IMAGE_OK
如果图像不需要验证
IMAGE_RESTORED
如果图像需要恢复。 恢复意味着图像的内容可能已经受到影响,并且可能需要重新渲染图像。
IMAGE_INCOMPATIBLE
如果图像与传递到validate
方法的GraphicsConfiguration
对象不兼容。 不兼容性意味着图像可能需要使用新的Component
或GraphicsConfiguration
重新创建,以获得可以成功使用该GraphicsConfiguration
。 不检查不兼容的图像是否需要恢复,因此在返回值为IMAGE_INCOMPATIBLE
之后图像的状态不变,并且此返回值对于是否需要还原图像无关。 - 另请参见:
-
GraphicsConfiguration
,Component
,IMAGE_OK
,IMAGE_RESTORED
,IMAGE_INCOMPATIBLE
-
contentsLost
public abstract boolean contentsLost()
如果自上一次validate
调用以来,如果渲染数据丢失,则返回true
。 应该在应用程序的任何一系列渲染操作结束时从图像调用该方法,以查看图像是否需要被验证,并且渲染重做。- 结果
-
true
如果绘图面需要恢复; 否则为false
。
-
getCapabilities
public abstract ImageCapabilities getCapabilities()
返回一个ImageCapabilities对象,可以查询该VolatileImage的具体功能。 这将允许程序员找到关于他们创建的特定VolatileImage对象的更多运行时信息。 例如,用户可能会创建一个VolatileImage,但系统可能没有可用于创建该大小图像的视频内存,因此尽管该对象是一个VolatileImage,但它并不像该平台上的其他VolatileImage对象那样加速。 用户可能希望该信息找到其他解决方案的问题。- 结果
-
一个包含
VolatileImage
功能的ImageCapabilities
对象。 - 从以下版本开始:
- 1.4
-
getTransparency
public int getTransparency()
返回透明度。 返回OPAQUE,BITMASK或TRANSLUCENT。- Specified by:
-
getTransparency
在接口Transparency
- 结果
-
这个透明度这个
VolatileImage
。 - 从以下版本开始:
- 1.5
- 另请参见:
-
Transparency.OPAQUE
,Transparency.BITMASK
,Transparency.TRANSLUCENT
-
-