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?
Antwort
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 ImageObserver
asynchron ist, ist in diesem Fall extrem wichtig.
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.Component
ImageObserver
implementiert, alle Subklassen tun als gut!g.drawImage(imge, 0,0, this)
- bezieht sich auf dieImageObserver
Instanz.imageUpdate()
- Wird bei Bedarf von derImageObserver
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, wirdtrue
zurückgegeben.
- Wenn das Bild vollständig ist, wird
ImageObserver.ALLBITS = 32
verschiedene Konstanten kombiniert, um das Argument
infoflags
zu bilden, das anzeigt, ob alle Informationen verfügbar sind oder nicht.
Werfen Sie einen Blick auf this und Oreilly's explanation. Also take a look at this manual it is really helpful
Wie zeichnen Sie Ihr Bild? Könnten Sie bitte etwas Code zur Verfügung stellen? – Heskja
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