Está en la página 1de 5

Laboratorio de Programación II Página 97

UNIVERSIDAD CATÓLICA DE SANTA MARÍA


PROGRAMA PROFESIONAL DE INGENIERÍA DE SISTEMAS

SESIÓN N° 16:

GRAFICOS 2D- DIBUJO DE FORMAS

I
OBJETIVOS
 Entender los conceptos de Dibujo de Formas en Gráficos 2D en java
 Formulación de ejercicios utilizando Dibujo de Formas e Imágenes.

II
TEMAS A TRATAR

 Dibujo de Formas
 Imágenes

III
MARCO TEORICO
DIBUJO DE FORMAS
Las clases del paquete java.awt.geom definen gráficos primitivos comunes, como puntos, líneas, curvas,
arcos, rectángulos y elipses.
Clases en el paquete java.awt.geom
Arc2D Ellipse2D QuadCurve2D
Area GeneralPath Rectangle2D
CubicCurve2D Line2D RectangularShape
Dimension2D Point2D RoundRectangle2D

Excepto para Point2D y Dimension2D, cada una de las otras clases geométricas implementa el
interface Shape, que proporciona un conjunto de métodos comunes para describir e inspeccionar objetos
geométricos bi-dimensionales.

Con estas clases podemos crear de forma virtual cualquier forma geométrica y dibujarla a través
de Graphics2D llamando al método draw o al método fill. Por ejemplo, las formas geométricas del
siguiente applet están definidas usando los geométricos básicos de Java 2D.
Formas Rectangulares
Los primitivos Rectangle2D, RoundRectangle2D, Arc2D, y Ellipse2D descienden
del RectangularShape, que define métodos para objetos Shape que pueden ser descritos por una caja
rectángular. La geometría de un RectangularShapepuede ser extrapolada desde un rectángulo que encierra
completamente el exterior de la Shape.

o
Ángel Montesinos, Eveling Castro, Mary Ruelas Sesión N 16
Laboratorio de Programación II Página 98

QuadCurve2D y CubicCurve2D
La clase QuadCurve2D nos permite crear segmentos de curvas cuadráticos. Una curva cuadrática está
definida por dos puntos finales y un punto de control.
La clase CubicCurve2D no permite crear segmentos de curvas cúbicos. Una curva cúbica está definida por
dos puntos finales y dos puntos de control. Las siguientes figuras muestran ejemplos de curvas cuadráticas
y cúbicas.

GeneralPath
La clase GeneralPath nos permite crear una curva arbitraria especificando una serie de posiciones a lo
largo de los límites de la forma. Estas posiciones pueden ser conectadas por segmentos de línea, curvas
cuadráticas o curvas cúbicas. La siguiente figura puede ser creada con 3 segmentos de línea y una curva
cúbica.

IMÁGENES
El API 2D de Java implementa un nuevo modelo de imagen que soporta la manipulación de imágenes de
resolución fija almacenadas en memoria. Una nueva clase Image en el
paquete java.awt.image, BufferedImage, puede ser usada para manipular datos de una ijagen recuperados
desde un fichero o una URL.

Por ejemplo, se puede usar un BufferedImage para implementar doble buffer -- los elementos gráficos son
dibujados fuera de la pantalla en el BufferedImage y luego son copiados a la pantalla a través de llamadas
al método drawImage de Graphics2D.
IV
(La práctica tiene una duración de 2 horas) ACTIVIDADES

1. Realizar la implementación de la clase DibujarPoligonos


import java.awt.*;
import javax.swing.*;

public class DibujarPoligonos extends JFrame {


// establecer cadena de barra de título y dimensiones de la ventana
public DibujarPoligonos()
{
super( "Dibujo de polígonos" );

setSize( 275, 230 );


setVisible( true );
}

o
Ángel Montesinos, Eveling Castro, Mary Ruelas Sesión N 16
Laboratorio de Programación II Página 99

// dibujar polígonos y polilíneas


public void paint( Graphics g )
{
super.paint( g ); // llamar al método paint de la superclase

int valoresX[] = { 20, 40, 50, 30, 20, 15 };


int valoresY[] = { 50, 50, 60, 80, 80, 60 };
Polygon poligono1 = new Polygon( valoresX, valoresY, 6 );

g.drawPolygon( poligono1 );

int valoresX2[] = { 70, 90, 100, 80, 70, 65, 60 };


int valoresY2[] = { 100, 100, 110, 110, 130, 110, 90 };

g.drawPolyline( valoresX2, valoresY2, 7 );

int valoresX3[] = { 120, 140, 150, 190 };


int valoresY3[] = { 40, 70, 80, 60 };

g.fillPolygon( valoresX3, valoresY3, 4);


Polygon poligono2 = new Polygon();
poligono2.addPoint( 165, 135 );
poligono2.addPoint( 175, 150 );
poligono2.addPoint( 270, 200 );
poligono2.addPoint( 200, 220 );
poligono2.addPoint( 130, 180 );

g.fillPolygon( poligono2 );

} // fin del método paint

// ejecutar la aplicación
public static void main( String args[] )
{
JFrame.setDefaultLookAndFeelDecorated(true);
DibujarPoligonos aplicacion = new DibujarPoligonos();
aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
}

} // fin de la clase DibujarPoligonos

2. Realizar la implementación de la clase Figuras


import java.awt.*;
import java.awt.geom.*;
import java.awt.image.*;
import javax.swing.*;

public class Figuras extends JFrame {

// establecer cadena de barra de título y dimensiones de la ventana


public Figuras()
{
super( "Dibujo de figuras en 2D" );

setSize( 425, 160 );


setVisible( true );
}

// dibujar figuras con la API Java2D


public void paint( Graphics g )
{
super.paint( g ); // llamar al método paint de la superclase
Graphics2D g2d = ( Graphics2D ) g; // convertir g a Graphics2D

// dibujar elipse 2D rellena con un gradiente azul-amarillo


g2d.setPaint( new GradientPaint( 5, 30, Color.BLUE, 35, 100,
Color.YELLOW, true ) );
g2d.fill( new Ellipse2D.Double( 5, 30, 65, 100 ) );

o
Ángel Montesinos, Eveling Castro, Mary Ruelas Sesión N 16
Laboratorio de Programación II Página 100

// dibujar rectángulo 2D en rojo


g2d.setPaint( Color.RED );
g2d.setStroke( new BasicStroke( 10.0f ) );
g2d.draw( new Rectangle2D.Double( 80, 30, 65, 100 ) );

// dibujar rectángulo 2D redondeado con fondo tamponado


BufferedImage buffImage = new BufferedImage( 10, 10,
BufferedImage.TYPE_INT_RGB );

Graphics2D gg = buffImage.createGraphics();
gg.setColor( Color.YELLOW ); // dibujar en amarillo
gg.fillRect( 0, 0, 10, 10 ); // dibujar un rectángulo relleno
gg.setColor( Color.BLACK ); // dibujar en negro
gg.drawRect( 1, 1, 6, 6 ); // dibujar un rectángulo
gg.setColor( Color.BLUE ); // dibujar en azul
gg.fillRect( 1, 1, 3, 3 ); // dibujar un rectángulo relleno
gg.setColor( Color.RED ); // dibujar en rojo
gg.fillRect( 4, 4, 3, 3 ); // dibujar un rectángulo relleno

// pintar buffImage en el objeto JFrame


g2d.setPaint( new TexturePaint( buffImage,
new Rectangle( 10, 10 ) ) );
g2d.fill( new RoundRectangle2D.Double( 155, 30, 75, 100, 50, 50 ) );
// dibujar arco 2D en forma de pastel, en color blanco
g2d.setPaint( Color.WHITE );
g2d.setStroke( new BasicStroke( 6.0f ) );
g2d.draw( new Arc2D.Double( 240, 30, 75, 100, 0, 270, Arc2D.PIE ) );

// dibujar líneas 2D en verde y amarillo


g2d.setPaint( Color.GREEN );
g2d.draw( new Line2D.Double( 395, 30, 320, 150 ) );

float guiones[] = { 10 };

g2d.setPaint( Color.YELLOW );
g2d.setStroke( new BasicStroke( 4, BasicStroke.CAP_ROUND,
BasicStroke.JOIN_ROUND, 10, guiones, 0 ) );
g2d.draw( new Line2D.Double( 320, 30, 395, 150 ) );

} // fin del método paint

// ejecutar la aplicación
public static void main( String args[] )
{
JFrame.setDefaultLookAndFeelDecorated(true);
Figuras aplicacion = new Figuras();
aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
}

} // fin de la clase Figuras

V
EJERCICIOS

1. En un aplicación demostrar la utilización de GeneralPath


2. Crear una aplicación y demostrar el uso de BufferedImage

VI
CUESTIONARIO
1. ¿Qué formas existen en Java 2D?
2. ¿En qué consiste java.awt.image ?

o
Ángel Montesinos, Eveling Castro, Mary Ruelas Sesión N 16
Laboratorio de Programación II Página 101

VII
BIBLIOGRAFIA Y REFERENCIAS
 Deitel-Deitel. Cómo programar en Java, 5ta Edición. Prentice Hall 2006.
 http://www.sun.com
 http://www.java.com/es

 http://www.eclipse.org

o
Ángel Montesinos, Eveling Castro, Mary Ruelas Sesión N 16