簡體   English   中英

getSize(),getWidth(),getHeight()返回-1

[英]getSize(), getWidth(), getHeight() returns -1

我有一個Image img,嘗試使用上述任何get方法時,返回-1。 為什么是這樣? 什么是ImageObserver對象?

根據Image的文檔,如果大小,寬度或高度(分別)未知,這些方法將返回-1。

同樣, ImageObserver只是一個接口,提供提供有關正在構造的Image對象的信息的通知的方法。

您可以使用MediaTrack來獲取圖像的寬度和高度,如下所示:

 // ...

 Image img;
 // ...
 // ...  loading the image using IO or Toolkit ot something

 MediaTracker MTrack = new MediaTracker(this); // in my case, 'this' is a JFrame

 MTrack.addImage(img,1);
 try 
{
    MTrack.waitForID(1);
} 
catch(InterruptedException e) 
{
   e.getMessage();
}

int width = img.getWidth(null);
int height = img.getHeight(null);

double ratio = (double)width/(double)height;

// ....
// ....

根據Java文檔 ,似乎如果在Image仍處於構造階段時在其上調用getHeight()等,以使高度不是真正“已知”,則返回-1並通知所提供的ImageObserver。

ImageObserver是一個接口,可為您提供一種以某種方式更新圖像時調用的回調方法的方法。 ImageObserver由java.awt.Component實現,因此,如果在包含的類中擴展它,則可以重寫imageUpdated()並在異步調用該函數時存儲圖像高度(如果Image.getHeight返回-1)。

在GraphTest中,覆蓋imageUpdate:

@Override
public void imageUpdate(Image img, int flags,
               int x, int y, int width, int height) {
    if ((flags & (WIDTH|HEIGHT)) == (WIDTH|HEIGHT)) {
        // width and height have meaningful values, do your resize here
    }
    super.imageUpdate(img, flags, x, y, width, height);
}

問題是加載圖像所需的時間。

只要未加載圖像,您就會得到-1。 最終加載圖像后,它將觸發 ImageObserver。 觀察服務器,在您的情況下為Background實例g.drawImage(bkg, 0, 0, this); -將強制重新繪制背景,從而繪制當前加載的圖像。

您也可以使用java.awt.MediaTracker來跟蹤圖像的狀態。

[]]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM