从曲线 c# 中提取点坐标 (x,y)



我有一条曲线,我使用方法在 C# 的图片框上绘制 图形.drawcurve(笔,点,张力(

无论如何,我可以提取曲线覆盖的所有点(x,y 坐标(吗? 并将它们保存到数组或列表中,或者任何东西都很棒,所以我可以在不同的事情中使用它们。

我的代码:

void Curved()
{
Graphics gg = pictureBox1.CreateGraphics();
Pen pp = new Pen(Color.Green, 1);
int i,j;
Point[] pointss = new Point[counter];
for (i = 0; i < counter; i++)
{
pointss[i].X = Convert.ToInt32(arrayx[i]);
pointss[i].Y = Convert.ToInt32(arrayy[i]);
}
gg.DrawCurve(pp, pointss, 1.0F);
}

提前非常感谢。

如果您真的想要像素坐标列表,您仍然可以让 GDI+ 完成繁重的工作:

using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using System.Drawing.Drawing2D;
namespace so_pointsfromcurve
{
class Program
{
static void Main(string[] args)
{
/* some test data */
var pointss = new Point[]
{
new Point(5,20),
new Point(17,63),
new Point(2,9)
};
/* instead of to the picture box, draw to a path */
using (var path = new GraphicsPath())
{
path.AddCurve(pointss, 1.0F);
/* use a unit matrix to get points per pixel */
using (var mx = new Matrix(1, 0, 0, 1, 0, 0))
{                    
path.Flatten(mx, 0.1f);
}
/* store points in a list */
var list_of_points = new List<PointF>(path.PathPoints);
/* show them */
int i = 0;
foreach(var point in list_of_points)
{
Debug.WriteLine($"Point #{ ++i }: X={ point.X }, Y={point.Y}");
}
}
}
}
}

这种方法将样条绘制到路径,然后使用内置功能将该路径展平为足够密集的线段集(大多数矢量绘制程序也是如此(,然后将路径点从线网格提取到PointF列表中。

GDI+ 设备呈现(平滑、消除锯齿(的项目在此过程中丢失。

相关内容

  • 没有找到相关文章

最新更新