2D剪辑区域的形状

时间:2013-10-26 21:50:36

标签: java awt shape java-2d

我对java中的图形很新,我正在尝试创建一个剪切到另一个形状底部的形状。这是我想要实现的一个例子:

http://i.stack.imgur.com/g3jKJ.png

形状底部的白线是在圆边内修剪的那种。 我这样做的当前方式是这样的:

g2.setColor(gray);
Shape shape = getShape(); //round rectangle
g2.fill(shape);
Rectangle rect = new Rectangle(shape.getBounds().x, shape.getBounds().y, width, height - 3);
Area area = new Area(shape);
area.subtract(new Area(rect));
g2.setColor(white);
g2.fill(area);

我还在尝试剪辑方法,但我似乎无法做到正确。这个当前的方法是否正常(性能明智,因为组件经常重新渲染)或者是否有更有效的方法?

2 个答案:

答案 0 :(得分:1)

  

此当前方法是否正常(性能明智,因为组件经常重新绘制)..

减去形状是我如何去做的。对象可以是几个实例,也可以是(可能)根据需要transformed的单个实例。

  1. A text demo.,使用缩放&褪色。
  2. 这里是one with simple lines(..和点,..并且它是动画的)
  3. 当然,如果图像纯粹是添加剂,请使用BufferedImage作为画布&将其显示在JLabel / ImageIcon组合中。正如在这两个例子中一样。

答案 1 :(得分:1)

我认为你最初使用剪辑方法的想法是正确的方法。这对我有用:

static void drawShapes(Graphics2D g, int width, int height,
    Shape clipShape) {

    g.setPaint(Color.BLACK);
    g.fillRect(0, 0, width, height);

    g.clip(clipShape);

    int centerX = width / 2;
    g.setPaint(new GradientPaint(
        centerX, 0, Color.WHITE,
        centerX, height, new Color(255, 204, 0)));

    g.fillRect(0, 0, width, height);

    g.setPaint(Color.WHITE);
    int whiteRectHeight = height * 4 / 5;
    g.fillRect(0, whiteRectHeight,
        width, height - whiteRectHeight);
}