2009-11-05 9 views

risposta

25

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à:

  1. return false (immediatamente)
  2. disegnare la maggior quantità di Image possibile (tutto ciò che viene caricato)
  3. 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.

+0

Grazie mille questo è davvero utile. –

1

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 ..

+0

:-) anch'io, e non avevo idea se sarebbe stato un problema. –

8

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.

+1

'imageUpdate' è anche chiamato per le immagini animate. –

1

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.

Problemi correlati