 Tutoriales
Gráficos con Java 2D
Problemas Más Comunes en los Gráficos en Java 2D
Problema: Puedo ejecutar applets Java2D con appletviewer, pero no
funcionan con mi navegador. La consola Java del navegador dice: defn not found
for java/awt/Graphics2D.
Problema: ¿Cómo puedo escribir sobre una imagen anterior? Nuestro
problema es que nuestro applet muestra una imagen de un mapa, pero cuando se dibuja una
línea sobre el mapa, la línea sobreescribe el mapa.
- Deberías intentar dibujar tu imagen dentro de un BufferedImage.
Luego, dibuja el BufferedImage dentro de un contexto
Graphics2D y luego dibuja la línea sobre el contexto
Graphics2D un ejemplo de código está en
Map_Line.java
Sólo debes sustituir el nombre de tu imagen por images/bld.jpg.
Problema: ¿Cómo creo un BufferedImage desde un
fichero gif o jpeg?
- Para crear un BufferedImage desde un gif o jpeg, debes cargar tu
fichero gif o jpeg en un objeto Image y luego
dibujar el Image en el objeto BufferedImage. El
siguiente fragmento de código ilustra esto.
Image img = getImage("picture.gif");
int width = img.getWidth(this);
int height = img.getHeight(this);
BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D biContext = bi.createGraphics();
biContext.drawImage(img, 0, 0, null);
getImage es un método Applet. Si tienes una
aplicación, puedes usar.
Image img = Toolkit.getDefaultToolkit().getImage("picture.gif");
BufferedImage.TYPE_INT_RGB es uno de los muchos tipos de
BufferedImage. Para más información, puedes ver.
http://java.sun.com/products/java-media/2D/forDevelopers/2Dapi/java/awt/image/BufferedImage.html
Necesitas crear un contexto Graphics2D para el
BufferedImage usando el método createGraphics. Luego,
puedes usar el método drawImage de la clase
Graphics2D para dibujar la imagen dentro del buffer.
Problema: No puedo compilar el código fuente de
StrokeAndFill.java y Transform.java con jdk1.2beta4.
- La implementación de TextLayout.getOutline se cambió entre la
beta4 y el JDK actual. La nueva implementación sólo toma un
AffineTransform como argumento. Necesitas descargar el nuevo JDK para ejecutar
el ejemplo.
Problema: ¿Existe alguna forma de especificar una fórmula para una
línea y dibujar un gráfico de acuerdo a ella?
- Usar los segmentos de línea podría ser la forma más sencilla. Pudes representar los
segmentos de línea rellenando un GeneralPath con ellos, o
implementando Shape y PathIterator y leyendo
los segmentos de línea 'bajo demanda' para guardar el almacenamiento intermedio del
objeto GeneralPath. Observa que podrías analizar tu fórmula para
determinar si corresponde con curvas cúbicas o cuadráticas.
Problema: ¿Cómo puedo añadir texto a un campo gráfico en una cierta
posición?
- En el JDK 1.2 se añadió una clase llamada Graphics2D (ahora
llamado Java 2 SDK). Esta clase desciende de Graphics. Hay dos
métodos drawString en Graphics2D que puedes
utilizar. Si quieres rotar el texto, deberías usar Graphics2D en vez
de Graphics por lo que podrás realizar rotaciones y otras
transformaciones en tu contexto Graphics2D.
El ejemplo Transform en el tutorial de 2D no usa
drawString para dibujar texto. Lo que sucede es que se crea un
TextLayout desde la cadena "Text." El TextLayout nos
permite crear un objeto Shape a partir del
String obteniendo su forma exterior. Introducimos está
Shape en el array de shapes, junto con las formas del rectángulo y de la
elipse. Cuando dibujamos o rellenamos el Shape seleccionado del
array de shapes, llamamos a g2.draw(Shape) o a
g2.fill(Shape).
Podrías usar drawString para dibujar el texto en el contexto
Graphics2D y luego llamar a g2.rotate (ángulo
de rotación). Esto rotará todo lo que hayamos introducido dentro del contexto
Graphics2D. Por eso, podríamos resetear el contexto g2
cada vez que querramos transformar una imagen particular o una parte del texto en el
contexto de forma separada de otras cadenas que hayan sido renderizadas en el contexto
g2.
Problema: He leido su comentario en la parte inferior de Crear y Derivar fuentes sobre el
bug 4155852. Este bug ha sido cerrado sin ninguna acción. ¿Es cierto que no se puede
aplicar un estilo a una fuente como Arial?
- El problema es que la correspondencia fuente-a-estilo no funciona de forma apropiada
para fuentes físicas (como Arial o Palatino). Sólo se pueden aplicar estilos a las
fuentes lógicas en este momento (como Dialog o SansSerif).
Como atajo hasta que se corrija el bug, podrías hacer lo siguiente:
Font f = new Font("Palatino Bold", Font.PLAIN, 12);
en lugar de :
Font f = new Font("Palatino", Font.BOLD, 12);
|
|
|