JavaTM 2 Platform
Standard Ed. 6

java.awt.image
類別 VolatileImage

java.lang.Object
  繼承者 java.awt.Image
      繼承者 java.awt.image.VolatileImage
所有已實作的介面:
Transparency

public abstract class VolatileImage
extends Image
implements Transparency

VolatileImage 是一種圖像,它可以在不受應用程序控制的情形下(例如,由作業系統或其他應用程序引起的情況)隨時丟失其內容。由於存在硬體加速的潛力,VolatileImage 物件在某些平臺上能夠獲得顯著的性能受益。

圖像的繪製表面(圖像內容實際駐留的記憶體)可以丟失或失效,從而引起該記憶體的內容丟失。因此,繪製表面需要恢復或重新創建,表面的內容需要重新呈現。VolatileImage 提供了一個介面,此介面允許使用者檢測這些問題,並在出現這些問題時修復它們。

當創建 VolatileImage 物件時,可能為支持圖像而分派了顯存 (VRAM) 之類別的有限系統資源。當不再使用 VolatileImage 物件時,可以將它作為垃圾回收,並返還其佔用的系統資源,但此過程無法在保證的時間內發生。創建許多 VolatileImage 物件的應用程序(例如,在視窗大小改變時可以強行重建其後台緩衝區的可調整大小視窗)可能會為新的 VolatileImage 物件用光最優系統資源,因為原有對象還沒有從系統中移除。(仍然可以創建新的 VolatileImage 物件,但它們執行起來可能不如那些在加速記憶體中創建的物件)。 可以調用 flush 方法在任何時間主動釋放由 VolatileImage 使用的資源,這樣就不會妨礙後續 VolatileImage 物件的加速操作。按照這種方式,應用程序可以對過時的 VolatileImage 物件所佔用的資源狀態擁有更多的控制權。

不能直接為此圖像創建子類別,而應該使用 Component.createVolatileImageGraphicsConfiguration.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

從以下版本開始:
1.4

欄位摘要
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
 

欄位詳細資訊

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
另請參見:
GraphicsConfiguration.createCompatibleVolatileImage(int, int,int), GraphicsConfiguration.createCompatibleVolatileImage(int, int,ImageCapabilities,int), Transparency
建構子詳細資訊

VolatileImage

public VolatileImage()
方法詳細資訊

getSnapshot

public abstract BufferedImage getSnapshot()
返回此物件的靜態快照圖像。返回的 BufferedImage 僅與請求時刻的 VolatileImage 保持一致,不隨 VolatileImage 未來的更改而更新。

返回:
VolatileImageBufferedImage 表示形式
另請參見:
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()。

指定者:
類別 Image 中的 getSource
返回:
ImageProducer,它可以為此 Image 的 BufferedImage 表示形式產生像素。
另請參見:
ImageProducer, getSnapshot()

getGraphics

public Graphics getGraphics()
此方法返回 Graphics2D,但它存在於此處是出於向後相容性的考慮。createGraphics 更為方便,因為它被宣告為返回 Graphics2D

指定者:
類別 Image 中的 getGraphics
返回:
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 物件與設備特別相關,此操作可能不會按預期進行,因此調用此 validate 返回的程式碼將記錄這種不相容性。null 或不正確的 gc 值可能引起 validate 返回不正確的值,隨後可能引起呈現問題。

參數:
gc - 一個 GraphicsConfiguration 物件,圖像依靠此物件進行驗證。gc 為 null 意味著 validate 方法應該跳過相容性測試。
返回:
如果圖像不需要驗證,則返回 IMAGE_OK
如果圖像需要恢復,則返回 IMAGE_RESTORED。恢復意味著圖像內容可能已受到影響,並且圖像可能需要重新呈現。
如果圖像與傳入 validate 方法的 GraphicsConfiguration 物件不相容,則返回 IMAGE_INCOMPATIBLE。不相容意味著圖像可能需要用新的 ComponentGraphicsConfiguration 重新創建,以獲得一個能夠用此 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 中的一個。

指定者:
介面 Transparency 中的 getTransparency
返回:
VolatileImage 的透明度。
從以下版本開始:
1.5
另請參見:
Transparency.OPAQUE, Transparency.BITMASK, Transparency.TRANSLUCENT

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only