1

对于某种蒙版对话框,我希望能够在 C# 中反转几何。例如,我想反转一个矩形。我已经为填充的矩形工作,但对于未填充的矩形同样不起作用。

例如,如果我在画布上有这个矩形:

长方形

我用以下代码反转这个矩形:

RectangleGeometry line = new RectangleGeometry(_myRectangle);
RectangleGeometry geo = new RectangleGeometry(_myCanvasRectangle);                               
PathGeometry intersect = Geometry.Combine(line, geo, GeometryCombineMode.Xor, null);
drawingContext.DrawGeometry(
    new SolidColorBrush(Color.FromArgb(99, _myObjectColor.R, _myObjectColor.G, _myObjectColor.B)),
    new Pen(new SolidColorBrush(_myObjectColor), _myActualLineWidth),
    intersect
);

我得到以下结果(灰色区域是填充区域)

填充矩形

有没有人可以实现只保留矩形(第一张图像中的黑线)并返回其余部分(填充灰色)的结果?

多谢你们!

4

1 回答 1

0

所以我自己找到了解决方案:似乎 C# 下的几何图形总是填充“形状”。但是您可以使用该GetWidenedPathGeometry方法获得轮廓(即使具有所需的笔画粗细!)!我的示例如下所示:

            RectangleGeometry outerRect = new RectangleGeometry(_myRectangle);
            RectangleGeometry geo = new RectangleGeometry(_myCanvasRectangle);
            PathGeometry outerRectLine = outerRect.GetWidenedPathGeometry(new Pen(new SolidColorBrush(Colors.White), _myActualLineWidth));

            PathGeometry intersect = Geometry.Combine(geo, outerRectLine, GeometryCombineMode.Exclude, null);

            drawingContext.DrawGeometry(
                new SolidColorBrush(System.Windows.Media.Color.FromArgb(99, _myObjectColor.R, _myObjectColor.G, _myObjectColor.B)),
                new System.Windows.Media.Pen(new SolidColorBrush(Colors.White), ActualLineWidth),
                intersect
                );

希望这对其他人有帮助!

于 2012-04-17T06:40:44.370 回答