2009-11-05 71 views

回答

25

您可以通過Graphics.drawImage(img, x, y, null) [或類似]逃脫。 ImageObserver參數是一個回調,通知您繪製操作的進度;並且只有在您異步獲取Image參數時纔有用。

更清晰,如果調用drawImage與不完全加載的圖像將:

  1. 返回FALSE(立即)
  2. 繪製儘可能多的Image儘可能的(即加載全部)
  3. ,並在未來的某個時刻,調入ImageObserver當更多的圖像可用

基本上,如果你與我的工作n內存Image(不管是從文件系統加載還是由程序構建)都不用擔心參數ImageObserver。如果您通過網絡加載Image,並且未明確等待加載,則需要使用ImageObserver以確保「完全」繪製Image

+0

非常感謝,這非常有幫助。 – 2016-08-03 22:20:51

1

其實我用drawImage()多次總是用ImageObserver參數設置爲null。好吧,這並不意味着它沒用,但我做了我所需要的任何東西,但不知道它的用途。

+0

:-)我也是 - 我不知道這是否會成爲問題。 – 2009-11-06 00:31:30

8

Image對象未必完全加載。如果在不完整的圖像上調用Graphics.drawImage,它將盡可能多地繪製圖像,然後在加載更多圖像時提醒ImageObserver(通過調用imageUpdate)。

ImageObserver可以爲空,在這種情況下,您將不會收到任何通知。如果圖像已知被加載,或者已經有另一個機制進行重繪,這是很常見的。

請注意,Component implements ImageObserver,其imageUpdate方法將導致repaint在受影響的區域。

+1

'imageUpdate'也被稱爲動畫圖像。 – 2009-11-06 00:26:46

1

正如其他人所暗示的,這個API是在假設將要呈現的圖像將被加載到網絡上時構思的。當您要求工具包加載圖像時,假設它只是一個外殼,並且知道其大小和像素所需的字節仍然沿着網線爬行。

在這種情況下,drawImage在第一次調用時可能不會呈現任何內容。隨着大小和像素可用,ImageObserver將被通知。在Component implements ImageObserver的情況下,其行爲是在數據可用時重新繪製。

相關問題