gpt4 book ai didi

C# GraphicsPath 绘图问题

转载 作者:行者123 更新时间:2023-11-30 15:45:56 25 4
gpt4 key购买 nike

我正在尝试在我的程序中绘制一个 GraphicsPath,但它似乎存在向路径添加随机尖峰的问题。路径越宽,情况似乎越糟。我做了一些可以重现这个问题的测试代码。

此代码需要一个包含 PictureBox 的表单(PictureBox 尺寸至少为 630 x 1050)和一个按钮。代码如下:

    private void button1_Click(object sender, EventArgs e)
{
drawSomeLines();

pictureBox1.Refresh();
}

private void drawSomeLines()
{
//initialise the plot area:
Bitmap image = new Bitmap(pictureBox1.Width, pictureBox1.Height);
pictureBox1.BackgroundImage = image;

Graphics g = Graphics.FromImage(image);

//create a graphics path:
GraphicsPath gPath = new GraphicsPath();

//add sections to the path:
gPath.AddLine(587.310059F, 29.2261658F, 229.974731F, 668.2402F);
gPath.AddArc(new RectangleF(203.177338F,560.3876F,421.357F,421.357F), -(90 - 299.21382700000413F), -1.532426F);
gPath.AddArc(new RectangleF(203.177368F,560.3876F,421.357F,421.357F), -(90 - 297.72672132554612F), -1.53240252F);
gPath.AddLine(224.740067F,678.2186F, 76.6899643F,979.773865F);

//draw the path 3 times, at different widths:
g.DrawPath(new Pen(new SolidBrush(Color.FromArgb(100, Color.Blue)), 80), gPath);
g.DrawPath(new Pen(new SolidBrush(Color.Blue), 40), gPath);
g.DrawPath(new Pen(new SolidBrush(Color.Red), 2), gPath);
}

我在此处以不同的宽度绘制了 3 次路径,这表明问题在宽度较大时如何变得更糟。

有谁知道为什么会发生这种情况,我该如何预防?任何想法将不胜感激。

干杯,

格雷格

最佳答案

你现在可能已经明白了这一点,但这就是你在你的行中得到“尖峰”的原因:

当您将第二个圆弧添加到图形路径对象时,其起点出现在您添加的第一个圆弧的终点“之前”。发生这种情况时,图形路径必须回溯以开始绘制第二个圆弧,最终会出现一些非常尖锐且形状奇特的角,尤其是在大线宽的情况下。

如果线条中有间隙,graphicspath 可以很好地填充它们,但如果有重叠,结果就不太好。

如果你改变这行代码:

gPath.AddArc(new RectangleF(203.177338F,560.3876F,421.357F,421.357F), -(90 - 299.21382700000413F), -1.532426F);

为此:

gPath.AddArc(new RectangleF(203.177338F,560.3876F,421.357F,421.357F), -(90 - 299.21382700000413F), -1.0F);

它消除了 2 个弧线段中的重叠,然后图形路径可以填充间隙并绘制平滑的线段,而没有产生“尖峰”的不良角效应。

从显示的角度来看,在你的行中有间隙比有任何重叠要好得多。

关于C# GraphicsPath 绘图问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4728874/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com