2013-10-06 34 views
12

當您繪製圖像時,它需要圖像觀察者。從我目前瞭解的BufferedImage是一個圖像觀察者。但我的問題是,什麼定義了圖像觀察者,它有什麼作用?我很困惑。什麼是ImageObserver?

+0

你是如何繪製圖像的?你能提供一些代碼嗎? – Heskja

+0

我使用的是一個BufferedImage,所以我只是將它設置爲null,但是由於我遇到了它,我想找到一個解釋。我搜索了Google,但找不到解釋它究竟是什麼。 – Troubleshoot

回答

11

首先,ImageObserver接口。根據docs

一個異步更新接口,用於在構造圖像時接收有關圖像信息的通知。

換句話說,它是一種面向對象的方式來使用可以完全創建之前修改的圖像。任何時候圖像被修改都會調用方法imageUpdate(Image img, int infoflags, int x, int y, int width, int height)。如果它想要被通知進一步的變化,則返回true,否則返回false。這種方法可以用來強制大小,分辨率,顏色等。它也給你一些錯誤的控制(ERROR標誌)。欲瞭解更多信息,請參閱this

觀察者也可能會處理關於圖像的重要信息 - 例如,如果我們在屏幕上繪製圖像並在繪製完成之前將其更改爲更大的圖像,則必須有方法通知我們重新說明維度已經發生變化(分配更多空間),並且必須處理這些變化。在這種情況下,ImageObserver異步的事實是非常重要的。

9

ImageObserver是一種具有處理圖像加載狀態通知方法的接口。它可以根據需要使用它來重新顯示。 JFrameApplet都實現了ImageObserver接口。

要告訴用戶關於一個圖像加載

  • ImageObserver接口 - 使加載過程的監控,使 用戶的知情權和圖像可以儘快使用,一旦它加載。

  • 異步加載圖像 - 如何知道圖像何時準備就緒。

    • 的圖像已準備就緒 - getImage()方法返回,沒過多久什麼是 知道關於圖像。

      imageUpdate(Image img, int infoflags, int x, int y, int width, int height) 
      
  • 注:java.awt.Component實現ImageObserver,所有的子類的 好!

  • g.drawImage(imge, 0,0, this) - 這是指ImageObserver實例。

  • imageUpdate() - 在必要時調用ImageObserver。你不明確地打電話給 !

    • 如果圖像完整,返回false
    • 如果圖像不完整並需要更新,返回true
  • ImageObserver.ALLBITS = 32

  • 各種常數被組合以形成所述infoflags參數,其指示所有 信息是否可用。

    info flag table

看看thisOreilly's explanationAlso take a look at this manual it is really helpful

相關問題