3

DrawingContextを保存または変換する可能性があるかどうかを知っている人はいGeometryますか?

例:後

using (DrawingContext dc = RenderOpen())
{
    dc.DrawLine(penSelected, Data.MidTop, Data.MidTop + vertical);
    dc.DrawLine(pen, Data.MidTop - horizontal, Data.MidTop + thickness);
    dc.DrawLine(pen, Data.MidTop + vertical - thickness, Data.MidTop + horizontal + vertical);
    dc.DrawText(new FormattedText(Data.Time2.ToString("0.0"), cultureinfo, FlowDirection.LeftToRight, typeface, 8, Brushes.Black),
        Data.MidTop + 3 * thickness);
    dc.DrawText(new FormattedText(Data.Time2.ToString("0.0"), cultureinfo, FlowDirection.LeftToRight, typeface, 8, Brushes.Black),
        Data.MidTop + vertical - horizontal - 3 * thickness);
}

描画されたオブジェクトをジオメトリに保存するにはどうすればよいですか?

4

1 に答える 1

9

DrawingDrawingVisual にビジュアル コンテンツを設定すると、 (DrawingGroup 型の) DrawingVisual のプロパティからアクセスできる、Drawing オブジェクトの階層コレクションが効果的に作成されます。これらの各 Drawing オブジェクトは、実際には次のいずれかのタイプです。

  • ジオメトリ図面
  • GlyphRunDrawing
  • 画像描画
  • ビデオドローイング
  • 図面グループ

これらのうちの 2 つは、Geometry を取得するためのプロパティまたはメソッドを提供します。明らかに、GeometryDrawing にはGeometryプロパティがありGlyphRunますが、GlyphRunDrawing には GlyphRun オブジェクトを返すプロパティがあり、これにはBuildGeometryメソッドがあります。このメソッドは、GlyphRun のテキストのアウトラインの Geometry を返します。

DrawingGroup から Geometry を作成する静的ヘルパー メソッドは、次のようになります。

public static Geometry CreateGeometry(DrawingGroup drawingGroup)
{
    var geometry = new GeometryGroup();

    foreach (var drawing in drawingGroup.Children)
    {
        if (drawing is GeometryDrawing)
        {
            geometry.Children.Add(((GeometryDrawing)drawing).Geometry);
        }
        else if (drawing is GlyphRunDrawing)
        {
            geometry.Children.Add(((GlyphRunDrawing)drawing).GlyphRun.BuildGeometry());
        }
        else if (drawing is DrawingGroup)
        {
            geometry.Children.Add(CreateGeometry((DrawingGroup)drawing));
        }
    }

    geometry.Transform = drawingGroup.Transform;
    return geometry;
}

DrawingVisual のDrawingプロパティの値をこのメソッドに渡すだけです。

var geometry = CreateGeometry(visual.Drawing);
于 2014-04-04T14:04:03.153 に答える