C# 系统图

C# 系统图,c#,winforms,graphics,C#,Winforms,Graphics,是否可以使用图形对象获取我们绘制的对象的所有点。 例如,我使用 崩溃 Graphics g = this.GetGraphics(); g.DrawEllipse(Pens.Red, 300, 300, 100, 200); 如何获得该函数绘制的所有点或像素 或者,是否有可能在窗体上绘制所有的点或像素 谢谢………据我所知,没有内置功能。但是计算所有这些点并不困难,因为你只需要有一个函数来根据形状的函数进行计算 使用此功能,您可以从开始到结束输入X值,然后根据该值计算Y,从而得出所有点: 据我

是否可以使用图形对象获取我们绘制的对象的所有点。 例如,我使用 崩溃

Graphics g = this.GetGraphics();
g.DrawEllipse(Pens.Red, 300, 300, 100, 200);
如何获得该函数绘制的所有点或像素 或者,是否有可能在窗体上绘制所有的点或像素


谢谢………

据我所知,没有内置功能。但是计算所有这些点并不困难,因为你只需要有一个函数来根据形状的函数进行计算

使用此功能,您可以从开始到结束输入X值,然后根据该值计算Y,从而得出所有点:


据我所知,没有内置功能。但是计算所有这些点并不困难,因为你只需要有一个函数来根据形状的函数进行计算

使用此功能,您可以从开始到结束输入X值,然后根据该值计算Y,从而得出所有点:

要回答问题的第二部分,即如何查找受影响的像素,请执行以下操作:

我强烈推荐上面列出的数学解决方案。然而,对于一个更暴力的选项,您可以简单地创建一个图像,绘制到它,然后循环通过每个像素来找到受影响的像素。这是可行的,但与真正的数学解决方案相比,速度会非常慢。它将随着图像大小的增加而变慢

如果绘制的圆是抗锯齿,而它们可能是着色和透明的,则这将不起作用。但是,它将适用于您上面列出的内容

e、 g

要回答问题的第二部分,即如何查找受影响的像素,请执行以下操作:

我强烈推荐上面列出的数学解决方案。然而,对于一个更暴力的选项,您可以简单地创建一个图像,绘制到它,然后循环通过每个像素来找到受影响的像素。这是可行的,但与真正的数学解决方案相比,速度会非常慢。它将随着图像大小的增加而变慢

如果绘制的圆是抗锯齿,而它们可能是着色和透明的,则这将不起作用。但是,它将适用于您上面列出的内容

e、 g


你能为你的问题添加更多的上下文说明你实际上想要实现什么吗?你能为你的问题添加更多的上下文说明你实际上想要实现什么吗?我认为数学解决方案不会以独立于机器图形卡的方式工作。数学解决方案无法解释渲染引擎如何尝试对曲线进行像素化,这可能取决于分辨率和驱动程序。我认为数学解决方案不会以独立于机器图形卡的方式工作。数学解决方案无法解释渲染引擎如何尝试对曲线进行像素化,这可能取决于分辨率和驱动程序。
...

List<Point> points = CreateImage(Color.Red,600,600);

...

    private List<Point> CreateImage(Color drawColor, int width, int height)
    {
        // Create new temporary bitmap.
        Bitmap background = new Bitmap(width, height);

        // Create new graphics object.
        Graphics buffer = Graphics.FromImage(background);

        // Draw your circle.
        buffer.DrawEllipse(new Pen(drawColor,1), 300, 300, 100, 200);

        // Set the background of the form to your newly created bitmap, if desired.
        this.BackgroundImage = background;

        // Create a list to hold points, and loop through each pixel.
        List<Point> points = new List<Point>();
        for (int y = 0; y < background.Height; y++)
        {
            for (int x = 0; x < background.Width; x++)
            {
                // Does the pixel color match the drawing color?
                // If so, add it to our list of points.
                Color c = background.GetPixel(x,y);
                if (c.A == drawColor.A &&
                    c.R == drawColor.R &&
                    c.G == drawColor.G &&
                    c.B == drawColor.B)
                {
                    points.Add(new Point(x,y));
                }
            }
        }
        return points;
    }