Java 2D
De Wikipedia, la enciclopedia libre
En computación, Java 2D es un API para dibujar gráficos en dos dimensiones usando el lenguaje de programación Java. Cada operación de dibujo Java 2D puede tratarse como rellenar una forma usando un pincel y componiendo el resultado en la pantalla.
Tabla de contenidos |
[editar] Conceptos básicos
Estos objetos son parte necesaria de cada operación de dibujo Java 2D.
[editar] Formas
Una forma en Java 2D es un limite infinitamente delgado el cual define un interior y un exterior. Los Pixeles internos de la forma están afectados por la operación de dibujo, los que están fuera no.
Intentar rellenar un segmento de línea recto extremadamente fino resultará en que no habrán pixeles afectados, por lo tanto una forma no contiene pixeles. En su lugar, un rectángulo fino se debe usar para que la forma contenga algunos pixeles.
[editar] Pinceles
Un pincel genera los colores que serán usados para cada pixel de la operación de relleno. El pincel más simple es java.awt.Color
, el cual genera el mismo color para todos los pixeles. Pinceles más complicados pueden producir gradientes, imágenes, o cualquier combinación de colores. Rellenar una forma circular usando el color amarillo resulta en un círculo sólido amarillo, mientras rellenar la misma forma circular usando un pincel que genera una imagen produce un recorte circular de la imagen.
[editar] Compuestos
Durante cualquier operación de dibujo, hay una fuente (los pixeles que son producidos por el pincel) y un destino (los pixeles ya en la pantalla). Normalmente, los pixeles fuente simplemente sobrescriben los pixeles de destino, pero el compuesto permite modificar este comportamiento.
El compuesto, dados los pixeles fuente y destino, produce el resultado final que por último aparece en la pantalla. El compuesto más común es java.awt.AlphaComposite
, el cual trata los pixeles que están siendo dibujados como parcialmente transparentes, para que los pixeles destino se muestren en algún grado.
[editar] Rellenado
Para rellenar una forma, el primer paso es identificar que pixels caen dentro de la forma. Estos pixeles serán afectados por la operación de relleno. Los Pixeles que están parcialmente dentro y parcialmente fuera de la forma pueden ser afectados en menor grado si está activado el Anti-aliasing.
El pincel es requerido para generar un color de cada uno de los pixels que se van a pintar. En el caso común del relleno de un color sólido, cada pixel será asignado al mismo color.
El compuesto toma los pixeles generados por el pincel y los combina con los pixeles que ya están en la pantalla para producir el resultado final.
[editar] Objetos Avanzados
Estos objetos pueden ser entendidos en relación con los objetos más simples escritos antes.
[editar] Transformación
Cada operación Java 2D es sujeto a transformación, para que las formas pueden ser traducidas, rotadas, y escaladas cuando son dibujadas. La transformación activa es a menudo la transformación identidad, la cual no hace nada.
Rellenar usando una transformación puede verse como simplemente crear una nueva forma transformada y entonces rellenar esa forma.
[editar] Movimiento
Además de la operación rellenar, Java 2D suministra una operación dibujar. Mientras rellenar dibuja el interior de una forma, dibujar dibuja su contorno. El contorno puede ser tan simple como una línea fina, o tan complicado como una línea con bordes redondeados.
El objeto responsable de generar el exterior es el movimiento. Dada una forma de entrada, el movimiento produce una nueva forma que representa su exterior. Por ejemplo, un segmento de línea infinitamente fino (sin interior) no puede ser movido a un rectángulo de ancho de un pixel.
Una operación dibujar puede por lo tanto ser descrito como crear un nuevo, objeto movido y entonces rellenar ese objeto.
Técnicamente hablando, el movimiento es sólo requerido para aceptar una forma de entrada y produce una nueva forma. La implementación de movimiento suministada con Java 2D implementa las reglas de contorno descritas anteriormente, pero un contorno personalizado podría producir cualquier forma deseada.
[editar] Optimizaciones
Conceptualmente, dibujando una línea negra en Java 2D puede pensarse como crear un segmento de línea, transformarlo de acuerdo a la transformación actual, moviéndolo para crear un rectángulo fino, consultando su forma para computar los pixeles que están siendo afectados, generando los pixeles que usan java.awt.Color.BLACK
, y entonces componiendo los resultados en la pantalla.
Sin embargo, realizar esta secuencia completa de pasos para cada operación de dibujado sería muy ineficiente. Java 2D por lo tanto optimiza las operaciones de dibujado comunes para que muchos de esos pasos puedan saltarse. Si el pincel es de un color sólido simple, por ejemplo, no hay necesidad de ordenar que genere una lista de los colores que van a ser pintados. Asimismo, si el compuesto por defecto completamente opaco está en uso, actualmente pedir que realice la operación de composición es innecesario y resultaría en esfuerzo inútil.
Java 2D realiza la mínima cantidad de trabajo necesario para hacer que parezca como si realizara todos los pasos para cada operación, por lo tanto conserva gran flexibilidad y alto rendimiento.
[editar] Destino
Por simplicidad, los ejemplos en este artículo han asumido que la ventana es el dispositivo destino. Sin embargo, el destino puede ser cualquier cosa, tal como una impresora, imagen de memoria, o incluso un objeto que acepte comandos gráficos Java 2D y los traduzca a ficheros de imagen de Gráficos vectoriales.*
[editar] interoperabilidad Java2D / OpenGL
Desde el build 51 hasta la nueva versión Java SE 6 del lenguaje de programación Java, Java2D y Opengl han llegado a ser interoperables, permitiendo por ejemplo dibujar gráficos 3D animados en lugar de iconos en un Botón (ver JOGL).
[editar] Enlaces externos
- Página Java 2D en Sun.