从 WinForms (GDI+) 迁移到 WPF 时如何替换 DrawClosedCurve / FillClosedCurve?
How to replace DrawClosedCurve / FillClosedCurve when moving from WinForms (GDI+) to WPF?
我有一组点 (X,Y),它们构成了一个凸包(一个简单的、不规则形状的轮廓)。我不想用直边渲染多边形,而是想用穿过所有这些点的近似 "smoothly curved" 轮廓来渲染它们。
在WinForms/GDI+中,这可以通过Graphics.DrawClosedCurve
或Graphics.FillClosedCurve
方法来完成。 WPF 中似乎没有等效项。
我研究过使用 Path
和 BezierSegment
之类的方法进行绘图,但我不确定是否(以及如何)使用这些方法来生成连续的闭合曲线,给定点集。看来要做到这一点,我可能必须根据我的轮廓生成一组控制点作为中间步骤?
我尝试使用 GDI+ 方法渲染到 System.Drawing.Bitmap
上,然后在 WPF 应用程序中显示它。这可行,但性能(特别是从 System.Drawing.Bitmap
到 BitmapSource
的转换)很差并且不足以满足应用程序的要求。这就是我寻找纯 WPF 解决方案的原因。
有没有人能够根据 WPF 中的一组点绘制闭合曲线?
遗憾的是,WPF 中没有与 DrawClosedCurve
等效的单一方法,即使 it's been requested 也是如此。所以你至少有两个选择:
- 在您的 WPF window 中托管本机 window 并在其上执行所有绘图。
- 实现你自己的cardinal spline drawing. You are on the right track with Bezier segments. However, there are existing implementations of it你可以看看那里。
我有一组点 (X,Y),它们构成了一个凸包(一个简单的、不规则形状的轮廓)。我不想用直边渲染多边形,而是想用穿过所有这些点的近似 "smoothly curved" 轮廓来渲染它们。
在WinForms/GDI+中,这可以通过Graphics.DrawClosedCurve
或Graphics.FillClosedCurve
方法来完成。 WPF 中似乎没有等效项。
我研究过使用 Path
和 BezierSegment
之类的方法进行绘图,但我不确定是否(以及如何)使用这些方法来生成连续的闭合曲线,给定点集。看来要做到这一点,我可能必须根据我的轮廓生成一组控制点作为中间步骤?
我尝试使用 GDI+ 方法渲染到 System.Drawing.Bitmap
上,然后在 WPF 应用程序中显示它。这可行,但性能(特别是从 System.Drawing.Bitmap
到 BitmapSource
的转换)很差并且不足以满足应用程序的要求。这就是我寻找纯 WPF 解决方案的原因。
有没有人能够根据 WPF 中的一组点绘制闭合曲线?
遗憾的是,WPF 中没有与 DrawClosedCurve
等效的单一方法,即使 it's been requested 也是如此。所以你至少有两个选择:
- 在您的 WPF window 中托管本机 window 并在其上执行所有绘图。
- 实现你自己的cardinal spline drawing. You are on the right track with Bezier segments. However, there are existing implementations of it你可以看看那里。