Recortar la Región de Dibujo
Cualquier Shape puede usarse como un path de recortado que restringe
las porciones del área de dibujo que serán renderizadas. El path de recortado forma parte
del contexto Graphics2D; para seleccionar el atributo clip, se llama
a Graphics2D.setClip y se pasa a la Shape que
define el path de recortado que queramos usar. Podemos reducir el path de recortado
llamando al método clip y pasándolo en otra
Shape; el atributo clip se configura a la intersección entre el clip actual y
el Shape especificado.
Ejemplo: ClipImage
Este ejemplo anima un path de recortado para revelar diferentes porciones de una imagen:
Esta es una imagen del GUI del applet. Para ajecutar el applet, pulsa
sobre ella. El applet aparecerá en una nueva ventana del navegador.
ClipImage.java
contiene todo el código de este applet. El applet requiere el fichero de
imagen
clouds.jpg.
El path de recortado está definido por la intersección de una elipse y un rectángulo
cuyas dimensiones son aleatorias. La elipse se pasa al método setClip
, y luego se llama al método clip para seleccionar el path de
recortado a la intersección entre la elipse y el rectángulo.
private Ellipse2D ellipse = new Ellipse2D.Float();
private Rectangle2D rect = new Rectangle2D.Float();
...
ellipse.setFrame(x, y, ew, eh);
g2.setClip(ellipse);
rect.setRect(x+5, y+5, ew-10, eh-10);
g2.clip(rect);
Ejemplo: Starry
Un área de recortado también puede crearse desde una cadena de texto existente. El
siguiente ejemplo crea un TextLayout con la cadena The Starry
Night. Luego, obtiene una línea exterior del TextLayout. El
método TextLayout.getOutline devuelve un objeto
Shape y un Rectangle creado a partir de los límites del
objeto Shape. Los límites contienen todos los pixels que layout
puede dibujar. El color en el contexto gráfico se selecciona a azul y se dibuja la figura
exterior de la forma, como ilustran la siguiente imagen y el fragmento de código.

FontRenderContext frc = g2.getFontRenderContext();
Font f = new Font("Helvetica", 1, w/10);
String s = new String("The Starry Night");
TextLayout tl = new TextLayout(s, f, frc);
AffineTransform transform = new AffineTransform();
Shape outline = textTl.getOutline(null);
Rectangle r = outline.getBounds();
transform = g2.getTransform();
transform.translate(w/2-(r.width/2), h/2+(r.height/2));
g2.transform(transform);
g2.setColor(Color.blue);
g2.draw(outline);
Luego, se selecciona un área de recortado en el contexto gráfico usando el objeto
Shape creado a partir de getOutline. La imagen
starry.gif, que es una pintura famosa de Van Gogh, The Starry
Night, se dibuja dentro de área de recortado que empieza en la esquina inferior
izquierda del objeto Rectangle.
g2.setClip(outline);
g2.drawImage(img, r.x, r.y, r.width, r.height, this);
Esta es una imagen del GUI del applet. Para ajecutar el applet, pulsa
sobre ella. El applet aparecerá en una nueva ventana del navegador.
Starry.java
contiene el código completo de este programa. El applet requiere el fichero
de imagen
Starry.gif.