SWT GC剪切圈

问题描述 投票:0回答:2

我想使用GC裁剪圆以外的区域。

GC有setClipping (Rectangle rect),但没有setClipping的圆。

有人知道该怎么做吗?

java swt
2个回答
0
投票

您必须使用其他方法:

public void setClipping(Region region)

这里是一个示例,您必须创建一个像这样的Region:

Region region = new Region();
int r = 10;
int x = 100;
int y = 100;
// int d = (2 * r); // diameter
region.add(circle(r, (x + r), (y + r)));

其中圆圈是以下方法:

public static int[] circle(int r, int offsetX, int offsetY) {
    int[] polygon = new int[8 * r + 4];
    // x^2 + y^2 = r^2
    for (int i = 0; i < 2 * r + 1; i++) {
        int x = i - r;
        int y = (int) Math.sqrt(r * r - x * x);
        polygon[2 * i] = offsetX + x;
        polygon[2 * i + 1] = offsetY + y;
        polygon[8 * r - 2 * i - 2] = offsetX + x;
        polygon[8 * r - 2 * i - 1] = offsetY - y;
    }
    return polygon;
}

0
投票

您可以使用GC.setClipping(Path path)

要创建代表圆的路径,请创建一个空的Path,然后使用addArc向其添加一个圆:

Path circlePath = new Path(gc.getDevice());
circlePath.addArc(x, y, width, height, 0.f, 360.f);
gc.setClipping(circlePath);
© www.soinside.com 2019 - 2024. All rights reserved.