剪切绘图区域

任何Shape对象都可以用作剪切路径,以限制将要渲染的绘图区域的一部分。剪切路径是Graphics2D上下文的一部分;要设置 clip 属性,您可以调用Graphics2D.setClip并传入Shape来定义要使用的剪切路径。您可以通过调用clip方法并传入另一个Shape来缩小剪切路径。剪辑设置为当前剪辑和指定的Shape的交集。

Example: ClipImage

本示例为剪切路径设置了动画,以显示图像的不同部分。

Note:

如果看不到 Servlets 正在运行,则需要至少安装Java SE 开发套件(JDK)7版本。

ClipImage.java包含此 Servlets 的完整代码。Servlets 需要clouds.jpg图片文件。

剪切路径由椭圆和矩形的交点定义,椭圆和矩形的交集是随机设置的。将椭圆传递给setClip方法,然后调用clip以将剪切路径设置为椭圆和矩形的交点。

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);

Example: Starry

还可以从文本字符串 创建剪切区域。以下示例使用字符串The Starry Night 创建一个TextLayout。然后,它获得TextLayout的轮廓。 TextLayout.getOutline方法返回Shape对象,并从该Shape对象的边界创建Rectangle。边界包含布局可以绘制的所有像素。图形上下文中的颜色设置为蓝色,并绘制轮廓形状,如以下图像和代码片段所示。

星夜文本(概述)

FontRenderContext frc = g2.getFontRenderContext();
Font f = new Font("Helvetica", 1, w/10);
String s = new String("The Starry Night");
TextLayout textTl = 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);

接下来,使用从getOutline创建的Shape对象在图形上下文上设置剪切区域。梵高着名的画作《星夜》的starry.gif图像从Rectangle对象的左下角开始绘制到此裁剪区域中。

g2.setClip(outline);
g2.drawImage(img, r.x, r.y, r.width, r.height, this);

Note:

如果看不到 Servlets 正在运行,则需要至少安装Java SE 开发套件(JDK)7版本。

Starry.java包含此程序的完整代码。此 Servlets 需要Starry.gif图片文件。