gpt4 book ai didi

wpf - 将 DrawingContext 转换为几何?

转载 作者:行者123 更新时间:2023-12-01 08:58:56 26 4
gpt4 key购买 nike

有人知道是否有可能将 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 时,您实际上是在创建绘图对象的分层集合,这些对象可以通过 DrawingVisual 的 Drawing 属性(类型为 DrawingGroup)访问。这些绘图对象中的每一个实际上都是以下类型之一:

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

其中两个提供了获取几何图形的属性或方法。显然,GeometryDrawing 具有 Geometry 属性,而 GlyphRunDrawing 具有返回 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);

关于wpf - 将 DrawingContext 转换为几何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22862162/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com