从曲线C#中提取点坐标(x,y) [英] Extracting points coordinates(x,y) from a curve c#

查看:218
本文介绍了从曲线C#中提取点坐标(x,y)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一条曲线,可以使用graphics.drawcurve(pen,points,张力)方法在c#中的图片框上绘制

i have a curve that i draw on a picturebox in c# using the method graphics.drawcurve(pen, points, tension)

无论如何,我可以提取曲线覆盖的所有点(x,y坐标)吗?并将它们保存到数组或列表中,否则任何事情都会很棒,所以我可以在其他事情中使用它们.

is there anyway that i can extract all points (x,y coordinates) been covered by the curve ? and save them into an array or list or any thing would be great, so i can use them in a different things.

我的代码:

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 +承担繁重的工作:

If you really want a list of pixel co-ordinates, you can still let GDI+ do the heavy lifting:

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 s的列表.

This approach draws the spline to a path, then uses the built-in capability of flattening that path to a sufficiently dense set of line segments (in a way most vector drawing programs do, too) and then extracts the path points from the line mesh into a list of PointFs.

此过程中丢失了GDI +设备渲染的伪像(平滑,抗锯齿).

The artefacts of GDI+ device rendering (smoothing, anti-aliasing) are lost in this process.

这篇关于从曲线C#中提取点坐标(x,y)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆