Come deve essere utilizzato il drawImage() di Java? Non trovo la documentazione JDK molto imminente. Ad esempio, tutte le firme drawImage richiedono un ImageObserver, ma la documentazione per questo non è molto utile per i nuovi utenti.Come funziona Java Graphics.drawImage() e qual è il ruolo di ImageObserver
risposta
Puoi farla franca con Graphics.drawImage(img, x, y, null)
[o simile]. Il parametro ImageObserver
è un callback per informarti dell'avanzamento dell'operazione di disegno; ed è davvero utile solo se stai recuperando il parametro Image in modo asincrono.
Per essere più chiari, se si chiama drawImage
con un'immagine non completamente caricato lo farà:
- return false (immediatamente)
- disegnare la maggior quantità di
Image
possibile (tutto ciò che viene caricato) - e, ad un certo punto futuro, chiamano in
ImageObserver
quando più della immagine è disponibile
in sostanza, se si sta lavorando con i n memoria Image
s (caricati dal file system o costruiti dal programma) non preoccuparti del parametro ImageObserver
. Se carichi Image
nella rete e non li attendi esplicitamente per caricarli, dovrai utilizzare uno ImageObserver
per assicurarti di "disegnare" completamente uno Image
.
In realtà ho utilizzato drawImage()
molte volte sempre con ImageObserver
parametro impostato su null
. Ok questo non significa che sia inutile, ma ho fatto tutto ciò di cui avevo bisogno senza conoscerne l'uso ..
:-) anch'io, e non avevo idea se sarebbe stato un problema. –
Image
Gli oggetti non sono necessariamente completamente caricati. Se Graphics.drawImage
viene richiamato su un'immagine incompleta, verrà disegnato il maggior numero possibile dell'immagine, quindi avviserà lo ImageObserver
(chiamando imageUpdate
) quando verrà caricata altra immagine.
Il ImageObserver
può essere nullo, nel qual caso non si riceverà alcuna notifica. Questo è comune se le immagini sono note per essere caricate, o se c'è già un altro meccanismo che fa ridisegni.
Nota che Component
implementa ImageObserver
, e il suo metodo imageUpdate
causerà un repaint
sulla zona interessata.
'imageUpdate' è anche chiamato per le immagini animate. –
Come altri hanno affermato, questa API è stata concepita quando si presumeva che le immagini che sarebbero state sottoposte a rendering sarebbero state caricate sulla rete. Quando si chiede al toolkit di caricare un'immagine, si assume che si tratti solo di una shell e che i byte richiesti per conoscerne le dimensioni e i pixel continuino a strisciare lungo il cavo.
In questo caso drawImage non può eseguire alcun rendering quando viene chiamato per la prima volta. Man mano che la dimensione e i pixel diventano disponibili, l'ImageObserver viene avvisato. Nel caso di Component implements ImageObserver
, il suo comportamento è quello di ridisegnare quando i dati sono disponibili.
Grazie mille questo è davvero utile. –