2013-10-06 14 views
12

Wenn Sie ein Bild zeichnen, benötigen Sie einen Bildbetrachter. Soweit ich das bisher verstanden habe, ist ein BufferedImage ein Bildbetrachter. Aber meine Frage ist, was einen Bildbetrachter definiert und was macht er? Ich bin ziemlich verwirrt.Was ist ein ImageObserver?

+0

Wie zeichnen Sie Ihr Bild? Könnten Sie bitte etwas Code zur Verfügung stellen? – Heskja

+0

Ich benutze ein BufferedImage, also setze ich es nur auf null, aber seit ich darauf gestoßen bin, wollte ich eine Erklärung finden, was tut. Ich habe Google durchsucht, konnte aber keine Erklärung dafür finden, was genau ist. – Troubleshoot

Antwort

11

Zunächst ist ImageObserver eine Schnittstelle. Nach docs:

Eine asynchrone Update-Schnittstelle für den Empfang von Benachrichtigungen über Bildinformationen, wie das Bild erstellt wird.

Mit anderen Worten, es ist eine objektorientierte Methode, Bilder zu verwenden, die vor der vollständigen Erstellung geändert werden können. Die Methode imageUpdate(Image img, int infoflags, int x, int y, int width, int height) wird jedes Mal aufgerufen, wenn das Bild geändert wird. Es gibt true zurück, wenn es über weitere Änderungen benachrichtigt werden soll und andernfalls false. Diese Methode kann verwendet werden, um Größe, Auflösung, Farben usw. zu erzwingen. Es gibt Ihnen auch eine gewisse Kontrolle über die Fehler (Flag). Für weitere Informationen siehe this.

Der Beobachter kann auch wichtige Informationen über das Bild verarbeiten - wenn wir zum Beispiel ein Bild auf den Bildschirm zeichnen und es in ein größeres Bild ändern, bevor das Rendering abgeschlossen ist, muss es eine Möglichkeit geben, was auch immer wir wissen Ich möchte darauf hinweisen, dass sich die Dimension geändert hat (mehr Platz zuweisen) und dass sie sich mit den Änderungen befassen muss. Die Tatsache, dass ImageObserverasynchron ist, ist in diesem Fall extrem wichtig.

9

ImageObserver ist eine Schnittstelle, die Methoden zur Handhabung der Benachrichtigung über den Status des Ladens von Bildern enthält. Er kann dies zur erneuten Anzeige nach Bedarf verwenden. JFrame und Applet beide implementieren ImageObserver Schnittstelle.

Benutzer zu informieren über die Belastung von ein Bild

  • ImageObserver Schnittstelle - Ermöglicht die Überwachung des Ladevorgangs, so dass Benutzer informiert werden kann, und das Bild kann so schnell wie möglich verwendet werden, sobald es ist geladen.

  • Laden eines Bildes asynchron - wie Sie wissen, wann das Bild fertig ist.

    • Ein Bild ist fertig - getImage() Methode gibt, lange bevor irgendetwas über das Bild bekannt ist.

      imageUpdate(Image img, int infoflags, int x, int y, int width, int height) 
      
  • Hinweis: java.awt.ComponentImageObserver implementiert, alle Subklassen tun als gut!

  • g.drawImage(imge, 0,0, this) - bezieht sich auf die ImageObserver Instanz.

  • imageUpdate() - Wird bei Bedarf von der ImageObserver aufgerufen. Sie rufen nicht explizit an!

    • Wenn das Bild vollständig ist, wird false zurückgegeben. Wenn das Bild nicht vollständig ist und aktualisiert werden muss, wird true zurückgegeben.
  • ImageObserver.ALLBITS = 32

  • verschiedene Konstanten kombiniert, um das Argument infoflags zu bilden, das anzeigt, ob alle Informationen verfügbar sind oder nicht.

    info flag table

Werfen Sie einen Blick auf this und Oreilly's explanation. Also take a look at this manual it is really helpful