Publicado el 14 de Enero del 2017
2.474 visualizaciones desde el 14 de Enero del 2017
3,2 MB
144 paginas
Creado hace 18a (09/04/2007)
Java a Tope:
Cómo tratar con Java
figuras, imágenes y texto en dos dimensiones
Sergio Gálvez Rojas
Manuel Alcaide García
Miguel Ángel Mora Mata
JAVA A TOPE: JAVA2D (CÓMO TRATAR CON JAVA FIGURAS, IMÁGENES Y
TEXTO EN DOS DIMENSIONES). EDICIÓN ELECTRÓNICA
AUTORES:
ILUSTRACIÓN
DE PORTADA:
SERGIO GÁLVEZ ROJAS
MANUEL ALCAIDE GARCIA
MIGUEL ÁNGEL MORA MATA
HTTP://WWW.INTERPEQUES2.COM/
Sun, el logotipo de Sun, Sun Microsystems y Java son marcas o marcas registradas de Sun
Microsystems Inc. en los EE.UU. y otros países. El personaje de «Duke» es una marca de Sun
Microsystems Inc.
Depósito Legal: MA-0722-2007
ISBN: 978-84-690-5677-6
Java a tope:
Java2D
Cómo tratar con Java figuras, imágenes y texto en dos
dimensiones
Sergio Gálvez Rojas
Doctor Ingeniero en Informática
Manuel Alcaide García
Ingeniero Técnico en Informática de Sistemas
Miguel Ángel Mora Mata
Ingeniero Técnico Superior en Informática
Dpto. de Lenguajes y Ciencias de la Computación
E.T.S. de Ingeniería Informática
Universidad de Málaga
Java a tope: Java2D
Índice
Prólogo.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . v
Capítulo 1:
1.2.1
1.2.2
1.2.3
1.2.4
1.2.5 Métodos de composición.
Introducción. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1 Descripción del capítulo.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Renderizado con Graphics2D.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Atributos de pincel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Atributos de relleno. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
La porción a dibujar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Transformaciones.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.3 ¿Qué puede dibujarse?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Figuras geométricas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.3.1.1 Conceptos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Fuentes y diseño de texto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Tratamiento de imágenes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.4 Tratamiento del color.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.3.2
1.3.3
1.3.1
2.1.1
2.5.1
2.3.1
2.3.2
2.1 Introducción.
Capítulo 2: Renderizado de imágenes con Graphics2D. . . . . . 15
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Ejemplo preliminar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.2 El contexto.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.3 El sistema de coordenadas de Java2D.. . . . . . . . . . . . . . . . . . . . . . . . . . 18
Coordenadas de usuario. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Coordenadas de dispositivo. . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.4 Un paso adelante: el canal alfa.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.5 Modificación del contexto de Graphics2D. . . . . . . . . . . . . . . . . . . . . . . 22
Preferencias, pinceles y colores.. . . . . . . . . . . . . . . . . . . . . . . . 22
2.5.1.1 Preferencias.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.5.1.2 Especificar el estilo de línea.. . . . . . . . . . . . . . . . . . . . . . . 24
2.5.1.3 Especificación de los atributos de relleno.. . . . . . . . . . . . . 28
Gradiente de color .. . . . . . . . . . . . . . . . . . . . . . . 28
2.5.1.3.1
2.5.1.3.2
Relleno con texturas.. . . . . . . . . . . . . . . . . . . . . . 29
Establecimiento del clipping path.. . . . . . . . . . . . . . . . . . . . . . 31
Transformaciones de objetos.. . . . . . . . . . . . . . . . . . . . . . . . . . 32
Composición de objetos gráficos.. . . . . . . . . . . . . . . . . . . . . . . 34
2.5.2
2.5.3
2.5.4
i
Índice
Capítulo 3:
3.2.1
3.2.2
3.2.3
3.2.4
3.2.5
3.2.6
3.2.7
3.2.8
3.2.9
Figuras geométricas en Java2D. . . . . . . . . . . . . . . 39
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
3.1 Introducción.
3.2 Figuras básicas.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Line2D.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Rectangle2D.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
RoundRectangle2D.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Ellipse2D. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Arc2D. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
QuadCurve2D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
CubicCurve2D .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
Point2D. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
Resumen de clases relacionadas con figuras geométricas. . . . . 47
3.3 Un primer ejemplo compuesto: bañera. . . . . . . . . . . . . . . . . . . . . . . . . . 48
3.4 La interfaz Shape.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Otra manera de construir figuras: GeneralPath.. . . . . . . . . . . . 50
Figuras geométricas a la medida: la bañera.
. . . . . . . . . . . . . . 51
Áreas Geométricas Constructivas (CAG). . . . . . . . . . . . . . . . . 55
3.4.3.1 Sherezade en el crepúsculo. . . . . . . . . . . . . . . . . . . . . . . . 57
3.5 JOGL (Java/OpenGL). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
3.4.1
3.4.2
3.4.3
4.2.1
Capítulo 4: Tratamiento de texto con Java2D. . . . . . . . . . . . . 61
4.1 Introducción.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
4.2 ¿Cómo encontrar las fuentes?.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Crear y derivar fuentes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
4.3 Dibujar texto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Dibujar una única línea de texto. . . . . . . . . . . . . . . . . . . . . . . . 63
Dibujar un párrafo completo.. . . . . . . . . . . . . . . . . . . . . . . . . . 66
Cómo dibujar texto sobre una imagen.. . . . . . . . . . . . . . . . . . . 70
Letra cursiva invertida mediante transformaciones. . . . . . . . . . 73
Rellenar un clipping path con distintos objetos.. . . . . . . . . . . . 74
4.4 Manejo de la clase TextAttribute. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
4.3.1
4.3.2
4.3.3
4.3.4
4.3.5
Capítulo 5:
Imágenes con Java2D.. . . . . . . . . . . . . . . . . . . . . . 81
5.1 Introducción.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
5.2 Obtención de imágenes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
Cargar una imagen.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
Cargar una imagen como BufferedImage. . . . . . . . . . . . . . . . . 83
Crear imágenes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
5.3 Mostrar una imagen.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
5.4 La clase MediaTracker.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
5.2.1
5.2.2
5.2.3
ii
Java a tope: Java2D
5.6.1
5.5.1
5.5 Dibujar sobre imágenes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
Double Buffering (dibujo en memoria). . . . . . . . . . . . . . . . . . . 91
5.6 Procesamiento de imágenes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
Operaciones predefinidas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
5.6.1.1 ConvolveOp.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
5.6.1.2 AffineTransformOp.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
5.6.1.3 LookupOp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
5.6.1.4 RescaleOp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
5.6.1.5 ColorConvertOp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
Dentro de BufferedImage. . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
5.6.2
6.2.1
6.1 Introducción.
6.2 Cómo crear un color.
Capítulo 6: El color en Java2D. . . . . . . . . . . . . . . . . . . . . . . . 117
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
Un ejemplo con colores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
6.3 Espacios de Colores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
El espacio de colores CIEXYZ. . . . . . . . . . . . . . . . . . . . . . . . 121
El espacio de colores sRGB . . . . . . . . . . . . . . . . . . . . . . . . . . 122
6.4 La clase ColorSpace.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
6.5 Perfiles.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
6.6 La verdad sobre el color. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
6.3.1
6.3.2
iii
Índice
iv
Java a tope: Java2D
Prólogo
El objetivo básico del texto que el lector tiene entre sus manos es
realizar un estudio completo y didáctico sobre la tecnología Java2D
que sirva como documentación para actuales y futuros programadores
en esta tecnología. Se pretende ser lo más claro y conciso posible pero sin dejar de
estudiar, aunque
Comentarios de: Java a tope: Java 2D (0)
No hay comentarios