new - parametros drawimage java
¿Cómo funciona Java Graphics.drawImage() y cuál es la función de ImageObserver? (4)
¿Cómo se debe utilizar el drawImage () de Java? No encuentro la documentación de JDK muy próxima. Por ejemplo, todas las firmas de drawImage requieren un ImageObserver pero la documentación para esto no es muy útil para los nuevos usuarios.
Como han dicho otros, esta API se concibió cuando se asumió que las imágenes que se renderizarían se cargarían a través de la red. Cuando le pide al kit de herramientas que cargue una imagen, se supone que es solo un shell y que los bytes requeridos para saber su tamaño y píxeles aún se arrastran por el cable.
En este caso, drawImage no puede mostrar nada cuando se llama por primera vez. A medida que el tamaño y los píxeles están disponibles, se notifica a ImageObserver. En el caso de Component implements ImageObserver
, su comportamiento es repintar cuando los datos están disponibles.
En realidad usé drawImage()
muchas veces siempre con el parámetro ImageObserver
establecido en null
. Ok, eso no significa que sea inútil, pero hice todo lo que necesitaba sin saber su uso ...
Image
objetos de Image
no están necesariamente completamente cargados. Si se invoca Graphics.drawImage
en una imagen incompleta, dibujará la mayor cantidad posible de la imagen y luego alertará a ImageObserver
(llamando a imageUpdate
) cuando se cargue más imagen.
El ImageObserver
puede ser nulo, en cuyo caso no recibirá ninguna notificación. Esto es común si se sabe que las imágenes están cargadas, o si ya hay otro mecanismo que repinta.
Tenga en cuenta que Component
implementa ImageObserver
, y su método imageUpdate
causará un repaint
en el área afectada.
Puedes salirte con Graphics.drawImage(img, x, y, null)
[o similar]. El parámetro ImageObserver
es una devolución de llamada para informarle del progreso de la operación de sorteo; y realmente solo es útil si está obteniendo el parámetro Imagen de forma asíncrona.
Para ser más claro, si llama a drawImage
con una imagen cargada de forma incompleta, esto:
- devuelve falso (inmediatamente)
- dibuja la mayor cantidad posible de la
Image
(todo lo que está cargado) - y, en algún momento futuro, llame a
ImageObserver
cuando haya más imagen disponible.
Básicamente, si está trabajando con Image
memoria (ya sea cargadas desde el sistema de archivos o ImageObserver
por su programa) no se preocupe por el parámetro ImageObserver
. Si está cargando Image
a través de la red y no está esperando explícitamente que se carguen, deberá emplear un ImageObserver
para asegurarse de que "completamente" dibuje una Image
.