1

我试图让一条路径充当OpacityMask另一条路径,以便仅绘制轮廓。我已经得到了两条正确重叠的路径,但是当我从 中创建一个GeometryDrawingPathGeometry,它会产生一些我无法理解的奇怪结果。

为了让您了解我在说什么,下图是两条路径,一条橙色和一条黑色,重叠以产生带有黑色轮廓的橙色路径的效果:

http://i.imgur.com/t0k3KvE.png

我正在寻找的是使橙色路径(顶部)成为OpacityMask黑色路径以创建透明度。当我尝试创建一个GeometryDrawing与 a 一起使用时,DrawingBrush我得到了一个奇怪的效果:

http://i.imgur.com/wShmWxF.png

如您所见,它不是挖掘黑色路径的内部,而是在其外部创建一个遮罩,并扭曲路径上的实际数据点。

这是绘制第一张图像的代码:

path2 = new System.Windows.Shapes.Path();
path2.Data = path1.Data.Clone();
path2.StrokeThickness = path1.StrokeThickness / 1.5;

path1.Stroke = Brushes.Black;
path2.Stroke = Brushes.Orange;

manipulationCanvas.Children.Add(path1);
manipulationCanvas.Children.Add(path2);

现在禁止设置代码并将它们添加到画布,使用以下代码创建第二个图像:

DrawingBrush opacityBrush = new DrawingBrush();
GeometryDrawing gDrawing = new GeometryDrawing(null, new Pen(Brushes.Black, path2.StrokeThickness), path1.Data);
opacityBrush.Drawing = gDrawing;

path1.Stroke = Brushes.Black;
path1.OpacityMask = opacityBrush;

path2.Stroke = Brushes.Orange;
path2.Opacity = 0.5;

谁能告诉我为什么会这样?

更新 1: 我已将问题缩小到无法从另一个元素中雕刻出形状。根据我对不透明蒙版的理解,我的印象是,为系统提供黑白颜色可以让我屏蔽图像或控件的某些区域,但不幸的是,我得到的是相反的:所有不透明的东西都被蒙上.

4

0 回答 0