OpacityMask
輪郭だけを描くために、別のパスとして機能するパスを取得しようとしています。2 つのパスが正しくオーバーラップするようになりましたが、GeometryDrawing
からを作成するPathGeometry
と、理解できない奇妙な結果が生成されます。
私が話していることを理解してもらうために、次の画像は、オレンジ色と黒色の 2 つのパスを重ね合わせて、オレンジ色のパスと黒い輪郭の効果を生み出しています。
私が探しているのはOpacityMask
、透明度を作成するために、オレンジ色のパス (一番上のパス) を黒いパスにすることです。GeometryDrawing
で使用するを作成しようとするとDrawingBrush
、奇妙な効果が得られます。
ご覧のとおり、黒いパスの内側を掘り下げる代わりに、その外側にマスクを作成し、パス上の実際のデータ ポイントを歪めます。
最初の画像を描画するコードは次のとおりです。
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);
セットアップ コードを除外してキャンバスに追加すると、次のコードを使用して 2 番目の画像が作成されます。
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: 別の要素から形状を切り出すことができないという問題に絞り込みました。不透明度マスクの理解から、システムに白黒の色を提供すると、画像またはコントロールの特定の領域をマスクできるという印象を受けましたが、残念ながら、私が得るのは逆です:透明でないものはすべてマスクされます.