【问题标题】:Convert DrawingContext to Geometry?将 DrawingContext 转换为几何?
【发布时间】:2014-04-04 11:56:37
【问题描述】:

有人知道是否有可能将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);
}

以某种方式将绘制的对象保存在几何图形中?

【问题讨论】:

  • 问题是如何从一个DrawingVisual中的所有绘制内容中获取一个几何体?

标签: wpf drawingcontext


【解决方案1】:

当您使用可视内容填充 DrawingVisual 时,您实际上是在创建绘图对象的分层集合,这些对象可通过 DrawingVisual 的 Drawing 属性(类型为 DrawingGroup)访问。这些绘图对象中的每一个实际上都是以下类型之一:

  • 几何绘图
  • GlyphRunDrawing
  • 图像绘图
  • 视频绘图
  • 绘图组

其中两个提供了获取几何图形的属性或方法。显然,GeometryDrawing 有一个Geometry 属性,而 GlyphRunDrawing 有一个返回 GlyphRun 对象的GlyphRun 属性,而 GlyphRun 对象又具有一个BuildGeometry 方法。此方法返回 GlyphRun 文本轮廓的几何图形。

从 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);

【讨论】:

  • 太好了,+1!请注意,如果不为空,您还应该在几何上应用绘图的变换。此外,要涵盖另外两种情况(图像和视频),您可以使用 Rect 属性 - 它的正确性取决于几何图形的用途。
猜你喜欢
  • 1970-01-01
  • 2013-08-18
  • 2020-10-01
  • 2020-07-11
  • 2011-10-04
  • 1970-01-01
  • 1970-01-01
  • 2021-06-15
  • 2015-07-19
相关资源
最近更新 更多