Wie funktioniert die Java-Grafiken.drawImage() funktioniert und was ist die Rolle der ImageObserver
Wie sollte Java die Methode drawImage() verwendet werden? Ich finde nicht die JDK-Dokumentation sehr entgegenkommend. Zum Beispiel alle drawImage Signaturen erfordern eine ImageObserver aber in der Dokumentation ist dies nicht sehr hilfreich für neue Benutzer.
InformationsquelleAutor der Frage peter.murray.rust | 2009-11-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie Weg mit
Graphics.drawImage(img, x, y, null)
[oder ähnlich]. DieImageObserver
parameter ist ein callback, um Sie über den Fortschritt der zeichnen-Vorgang; und ist wirklich nur sinnvoll, wenn Sie das abrufen der Bild-parameter asynchron.Klarer zu werden, wenn Sie Sie nennen
drawImage
mit einem unvollständig geladenen Bild wird es:Image
wie möglich (alle, die geladen wird)ImageObserver
wenn das Bild verfügbar istGrundsätzlich, wenn Sie arbeiten mit in-memory -
Image
s (entweder aus dem Dateisystem geladen oder aufgebaut, die von Ihrem Programm) Mach dir keine sorgen über dieImageObserver
parameter. Wenn Sie ladenImage
s über das Netzwerk und nicht ausdrücklich auf Sie warten, um zu laden, müssen Sie beschäftigen eineImageObserver
um sicherzustellen, dass es "komplett" zeichnen Sie einImage
.InformationsquelleAutor der Antwort Kevin Montrose
Image
Objekte sind nicht unbedingt vollständig geladen werden. WennGraphics.drawImage
ist aufgerufen, die auf einem unvollständigen Bild, das er zeichnet, wie viel von dem Bild, wie es kann, und dann alarmiert dieImageObserver
(durch AufrufimageUpdate
) wenn das Bild geladen ist.Den
ImageObserver
kann null sein, in welchem Fall Sie erhalten keine Benachrichtigung. Dies ist üblich, wenn die Bilder bekannt sind, die geladen werden, oder wenn es bereits einen anderen Mechanismus tun repaints.Beachten Sie, dass
Component
implementiertImageObserver
und seineimageUpdate
Methode wird die Ursacherepaint
auf den betroffenen Bereich.InformationsquelleAutor der Antwort Laurence Gonsalves
Eigentlich habe ich verwendet
drawImage()
viele Male, immer mitImageObserver
parameternull
. Ok, dass bedeutet nicht, es ist nutzlos, aber ich Tat, was ich brauchte, ohne zu wissen, seine verwenden..InformationsquelleAutor der Antwort Jack
Als andere haben angedeutet, diese API konzipiert wurde, wenn es wurde davon ausgegangen, dass die Bilder, die gerendert werden würde, geladen werden über das Netzwerk. Wenn Sie Fragen, ist das toolkit, ein Bild zu laden, ist die Annahme, dass es nur eine Hülle ist, und dass die bytes erforderlich, zu wissen, seine Größe und die Pixel sind immer noch kriechen nach unten den Draht.
In diesem Fall drawImage macht vielleicht nichts, wenn es zuerst genannt. Die Größe und die Pixel verfügbar, der ImageObserver benachrichtigt. Im Fall von
Component implements ImageObserver
sein Verhalten ist zu streichen, wenn die Daten zur Verfügung stellen.InformationsquelleAutor der Antwort Duncan McGregor