Anotaciones Técnicas.  
 
     
Buscador:
Digital ToTSoL Web
 
powered by FreeFind
Anotaciones

Nota 1Revisión de los problemas y soluciones en el desarrollo de animaciones gráficas en Java

Nota 2Licencias del software abierto.

Nota 3Modelos de aplicaciones web independientes de la plataforma

Nota 4Lista de la seguridad en aplicaciones Web.

Nota 5Anotaciones sobre mi primer proyecto basado en XML y XSL.

Nota 6Como proteger las Aplicaciones Web de los ataques del exterior.

Nota 7Recolectores de Noticias sobre Java, XML.

Nota 8Relájate y disfruta... con Applets Java

Nota 9Entorno de desarrollo basado en XML/XSL para crear y mantener Aplicaciones Web

Nota 10Presentación del entorno de desarrollo de esta Web.

 
Digital ToTSoL un proyecto personal de Ferrán Casasús Rodó

Revisión de los problemas y soluciones en el desarrollo de animaciones gráficas en Java

Nota 1: actualizada el 15/06/2000
Anotación: Para explicar la parte gráfica del Visor de Cómics en Internet no viene mal un poco de información.

Mi primer libro de Java fue " Java Manual de Referencia " [jv1] , sólo trata el java 1.0 y, aunque tiene un capítulo dedicado a los gráficos en java, sus lagunas son importantes, sobre todo en lo referente a cuando se realiza la carga de una imagen en memoria.

Así que, el lugar donde encontré una explicación clara de lo que hicieron los chicos de Java, fue en JavaWorld , en la serie de artículos How-To Java [jw] , son artículos dedicados a los gráficos:

Esquema de las clases que intervienen al crear una imagen.



A modo de resumen y para fijar un esquema: en el proceso de creación de una imagen intervienen ocultas las siguientes interfaces:
  • ImageProducer ( Crea la imagen o la recibe del exterior -disco, red- )
  • ImageConsumer ( Recibe las notificaciones del estado de la recuperación / creación de la imagen y almacena los datos de la imagen).
  • ImageObserver ( Oculta la complejidad del ImageConsumer ).


Para ocultar más:
  • la clase Applet es heredera de la clase Component . Component implementa el interface ImageObserver , para que cuando se haya recibido la imagen se llame al método paint() (vía repaint() ). Con lo cual sólo hay que desarrollar el método paint() .
  • Por otro lado, tenemos que la clase Component tiene el método getImage() que oculta el ImageProducer en el caso de recuperar una imagen de un fichero GIF o JPG, y el método prepareImage() oculta el trasiego entre el productor y consumidor.
  • Lo mismo hacen el drawImage() de la clase Graphics y la clase MediaTracker .


Sigamos otro poco:

Miremos hacia la clase java.awt.image.MemoryImageSource , que está pensada para la animación: implementa el ImageProducer para trabajar a partir de un array de enteros (buffer de memoria). Si generamos un objeto Image , con MemoryImageSource , toda la estructura de clases hará que cuando la imagen ya esté preparada automáticamente se llame método paint() . En este método será donde pasamos del buffer de memoria a la pantalla.

Verdaderamente, todo este esfuerzo de ocultación está bien y es productivo, pero desentrañarlo, tiene tela marinera, lo mostrado aquí es sólo el principio. A veces, se tiene la sensación de estar cazando moscas con un bazoca, cuando es del todo sabido que un simple matamoscas, es mas rápido, eficaz y ligero.

Proceso de renderizado

Pero, si esto no es suficiente y quieres saber qué pasa dentro del proceso de renderizado, es decir, cuando ejecutas el drawImage() en el segundo capítulo del libro [jv2] de Jonathan Knudsen , hay una excelente explicación.

La división en 5 pasos del proceso:
  • transformación (determinar la forma que ha de ser randerizada)
  • "rasterizer" (convertir un forma ideal en un conjunto de pixeles)
  • seleccionar sólo el área que se ve afectada
  • determina los colores usados
  • y los combina con la imagen existente.


Con tanta teoría es necesario ver algún código fuente de un caso práctico: puedes visitar a Werner Randelshofer [wr] un chico suizo que tiene un par de productos dedicados a la animación, y con el código fuente a tu disposición. Además ha creado botones a lo swing compatibles con la versión de Java 1.0.2.. y utiliza el MemoryImageSource . En la dirección de Guru Gamelan [cg] contienen más ejemplos.

Modelos para el renderizado de alto rendimiento.

Una de las base principales en el diseño de un entorno gráfico de altos requerimientos de ejecución es el uso de los hilos (threads), y para su conocimiento completo tenemos el excelente libro Concurrent Programmning in Java de Doug Lea [jv3] , que ya da una idea de su contenido, yo tengo el de la segunda edición, es muy completo y relativamente fácil de seguir. Recomendable de todas, todas.

Pero si quieres soluciones más específicas para la representación gráfica de alto rendimiento, existe en la red la revista Dr Dopps Java [ddj] una subparte de www.byte.com, De esta revista yo resaltaría:
  • Wrikting High-Perfomance Graphical Java Components (los de DJJ han retirado el ariculo) , donde se explica un caso práctico de la creación de una clase gráfica y sus trucos para conseguir una animación aceptable cuando hay muchos cálculos y elementos gráficos. Sus consejos se pueden aplicar en otros campos.
  • Java 2 Graphis Rendering [ddj09] . Su título despista, ya que no está dedicado en exclusiva a Java 2 Graphics, sinó que, es muy útil para saber que modelos de diseño (patterns) son útiles para un entorno gráfico de alto rendimiento. Es decir, a partir del modelo de diseño (patterns) en "pipeline" del proceso de representación gráfica, explica dos técnicas importantes: la pila de objetos (object pooling) y la cola de mensajes asíncronos para trabajar con un hilo, en cada una de las fases de renderizado.

    Esto esta bien cuando hay que trabajar con pequeñas áreas de imagen, pero este no es mi caso y su rendimiento no era mejor que con un solo "thread" . (Yo también estoy sorprendido, pero mis tests así lo indican, se podría pensar que es un problema de asignación de prioridades a las hilos, pero donde se relentizaba era en el momento de realizar la imagen, ya sea en memoria o en pantalla, y poco se puede hacer con optimizar los hilos.)
  • Más sobre mensajes asíncronos: An Asynchronous Design Pattern. [ddj06]
Relacion de enlaces:

jv1: Java Manual de Referencia
Obsborne McGraw-hill (ISBN: 84-481-1131-1)
Firmado por: Naughton y Schilt
Schilt es un conocido autor de libros sobre el lenguaje C y C++, Naughton fue uno de los desarrolladores del Java que lo avandono poco antes de ser presentado.

jv2: Java 2D Graphics
Editorial O'Rell (ISBN: 1-56592-484-3)
Firmado por: Jonathan Knudsen
El libro se centra en la nuevas librerias gráficas del Java 1.2, asi como la lógica interna del renderizado, (que puede servirte para entender otros modelos de renderizado ), cuidado con utilizarlas en applets, los navegadores versiones 4 y 5 no las implementan.

jv3: Concurrent Programmning in Java (Design Principles and Patters)
Editorial Sun y Addison-Wesley
Firmado por: Doug Lea

jw: JavaWorld How-To Java
http://www.javaworld.com
http://www.javaworld.com/javaworld/topicalindex/jw-ti-howto.html
Fecha del documento / revisión enlace: 07/2000/
Relación de artículos de la excelente revista el eléctronica JavaWorld que muestran las posibilidades y como se aplican en casos practicos las librerias Java. Cada mes hay un nuevo artículo. Además, en todos ellos hay enlaces útiles que complementan la información.

jw02: Learn how applets load network-based images asynchronously
http://javaworld.com/javaworld/jw-02-1997/jw-02-howto.html
Firmado por: Todd Sunsetd
Primero de los tres capítulos. Subtitulado como un mirada cercana a como los applets de Java trabajan con las imagenes en entorno de red.

jw03: How Java uses the producer /consumer model to handel imagens - An insider´s look
http://javaworld.com/javaworld/jw-03-1997/jw-03-howto.html
Firmado por: Todd Sunsetd
Segundo capítulo

jw04: When static images just don´t make the cut
http://javaworld.com/javaworld/jw-04-1997/jw-04-howto.html
Firmado por: Todd Sunsetd
Tercer capítulo dedicado ha realizar animaciones aprovechando el modelo proveedor / consumidor.

wr: Werner Randelshofer
http://www.randelshofer.ch
Firmado por: Werner Randelshofer

cg: Code Guru
http://codeguru.earthweb.com/java
Fecha del documento / revisión enlace: 07/2000
Tiene una lista immensa de programas java clasificados, tutoriales, pero sin seleccionar

ddj: Writing High-Perfomance Graphical Java Components
http://www.ddj.com/topics/java/articles.htm?topic=java

ddj09: Java 2 Graphis Rendering . (An architecture for extreme animation)
http://www.ddj.com/articles/1999/9909/9909a/9909a.htm?topic=java

ddj06: An Asynchronous Design Pattern
http://www.ddj.com/articles/1996/9606/9606d/9606d.htm?topic=java
Firmado por: Allan Vermeulen


Ferrán Casasús Rodó a: 15/06/2000



Subir

Por favor, da tu opinión?

Genial! Bien No está mal Pse! Chorrada!


Digital ToTSoL Home | Negocios en Red | Desarrollos | Anotaciones Técnicas | Vinclateca
Copyright © (2000-2001) Ferrán Casasús Rodó Digital ToTSoL