[英]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.