Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从WinForms(GDI+;)移动到WPF时,如何替换DrawClosedCurve/FillClosedCurve?_C_Wpf_Gdi+_Bezier_Curve - Fatal编程技术网

从WinForms(GDI+;)移动到WPF时,如何替换DrawClosedCurve/FillClosedCurve?

从WinForms(GDI+;)移动到WPF时,如何替换DrawClosedCurve/FillClosedCurve?,c,wpf,gdi+,bezier,curve,C,Wpf,Gdi+,Bezier,Curve,我有一组点(X,Y),它们构成了一个凸壳(一个简单的,不规则形状的轮廓)。我不想渲染具有直边的多边形,而是希望使用经过所有这些点的近似“平滑弯曲”轮廓来渲染它们 在WinForms/GDI+中,这可以通过Graphics.DrawClosedCurve或Graphics.FillClosedCurve方法实现。WPF中似乎没有一个等价物 我曾研究过使用路径和贝塞尔线段等工具进行绘图,但我不确定在给定一组点的情况下,这些工具是否(以及如何)可以用于生成连续的闭合曲线。看来要做到这一点,我可能必须根

我有一组点(X,Y),它们构成了一个凸壳(一个简单的,不规则形状的轮廓)。我不想渲染具有直边的多边形,而是希望使用经过所有这些点的近似“平滑弯曲”轮廓来渲染它们

在WinForms/GDI+中,这可以通过
Graphics.DrawClosedCurve
Graphics.FillClosedCurve
方法实现。WPF中似乎没有一个等价物

我曾研究过使用
路径
贝塞尔线段
等工具进行绘图,但我不确定在给定一组点的情况下,这些工具是否(以及如何)可以用于生成连续的闭合曲线。看来要做到这一点,我可能必须根据我的轮廓生成一组控制点作为中间步骤

我曾尝试使用GDI+方法在
System.Drawing.Bitmap
上渲染,然后在WPF应用程序中显示。这是可行的,但性能(特别是从
System.Drawing.Bitmap
BitmapSource
的转换)很差,不足以满足应用程序的需要。这就是我寻找纯WPF解决方案的原因


有人能够根据WPF中的一组点绘制闭合曲线吗?

不幸的是,WPF中没有一种方法可以与
DrawClosedCurve
等效。因此,您至少有两个选择:

  • 在WPF窗口中宿主一个本机窗口,并在其上执行所有绘图
  • 实现你自己的。使用Bezier线段,您处于正确的轨道上。然而,你可以看看外面有什么

非常感谢您!你的回答正是我需要的信息。特别是最后一个环节。