首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# GraphicsPath绘图问题

C# GraphicsPath绘图问题
EN

Stack Overflow用户
提问于 2011-01-19 04:51:56
回答 1查看 3.3K关注 0票数 3

我试图在我的程序中绘制一个GraphicsPath,但它似乎有问题,它添加随机尖峰路径。道路越宽,情况似乎就越糟。我做了一些测试代码,可以复制这个问题。

这段代码需要一个包含PictureBox (PictureBox尺寸至少为630x1050)的表单和一个按钮。然后代码如下所示:

代码语言:javascript
复制
    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次路径,这表明问题如何在更大的宽度下变得更糟。

有没有人知道为什么会发生这种情况,以及我如何防止它发生?任何想法都将不胜感激。

干杯,

格雷格

EN

回答 1

Stack Overflow用户

发布于 2012-01-03 23:06:45

你现在可能已经弄明白了这一点,但这就是为什么你会在你的行中得到“尖峰”:

当您将第二个圆弧添加到您的graphicspath对象中时,它的起点位于您添加的第一个圆弧的终点之前。当这种情况发生时,图形路径必须回溯以开始绘制第二个圆弧,最终会出现一些非常尖锐和形状奇怪的角点,特别是在较大的线宽处。

如果您的行中有间隙,则graphicspath可以很好地填充它们,但是如果您有重叠,结果就不会很好。

如果您更改此行代码:

代码语言:javascript
复制
gPath.AddArc(new RectangleF(203.177338F,560.3876F,421.357F,421.357F), -(90 - 299.21382700000413F), -1.532426F);

要这样做:

代码语言:javascript
复制
gPath.AddArc(new RectangleF(203.177338F,560.3876F,421.357F,421.357F), -(90 - 299.21382700000413F), -1.0F);

它消除了两个弧段中的重叠,然后图形路径可以填充间隙并绘制平滑的线段,而不会产生产生“尖峰”的不希望看到的角落效果。

从显示的角度来看,在你的线条上有间隙要好得多,而不是有重叠。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4728874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档