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 に答える