getSize (), getWidth (), getHeight () возвращает -1 - PullRequest
1 голос
/ 03 декабря 2009

У меня есть изображение, которое при попытке использовать любой из вышеупомянутых методов get возвращает -1. Почему это? А что такое объект ImageObserver?

Ответы [ 5 ]

2 голосов
/ 03 декабря 2009

Согласно документации для Image , эти методы возвращают -1, если размер, ширина или высота (соответственно) еще не известны.

Кроме того, ImageObserver - это просто интерфейс, который предоставляет методы для получения уведомлений об информации о строящемся объекте Image.

1 голос
/ 24 апреля 2011

Вы можете использовать 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;

// ....
// ....
0 голосов
/ 04 декабря 2009

Проблема заключается в времени, необходимом для загрузки изображения.

Пока изображение не загружено, вы получите -1. Когда изображение наконец загружено, оно запускает ImageObserver. Obeserver, в вашем случае экземпляр Background - g.drawImage(bkg, 0, 0, this); - заставит перекрашивать фон, вызывая окрашивание загруженного изображения.

Вы также можете использовать java.awt.MediaTracker для отслеживания статуса вашего изображения.

[]]

0 голосов
/ 04 декабря 2009

В 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);
}
0 голосов
/ 03 декабря 2009

Согласно Java документам , кажется, что если вы вызываете getHeight () и т. Д. Для Image, пока оно еще находится на этапе построения, то есть высота на самом деле не "известна", -1 возвращается, и предоставленный ImageObserver уведомляется.

ImageObserver - это интерфейс, который позволяет вам иметь метод обратного вызова, который вызывается, когда изображение каким-либо образом обновляется. ImageObserver реализован с помощью java.awt.Component, поэтому, если вы расширяете его в содержащем классе, вы можете переопределить imageUpdated () и сохранить высоту изображения, когда функция вызывается асинхронно (если Image.getHeight возвращает -1).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...