意想不到的结果画圈

时间:2014-12-27 13:02:00

标签: c#

我试图通过在旧的顶部绘制一个像素大半径圆来绘制一个尺寸增大的圆,这样就可以在pictureBox上创建一个增长的圆圈。

我所看到的是一个水滴形状而不是圆形。我使用的代码是:

        for (int x = 0; x < 20; x++)
        {
            System.Drawing.Graphics graphics = box.CreateGraphics();
            System.Drawing.Rectangle rectangle = new System.Drawing.Rectangle(xpos-10, ypos-10, x, x);
            graphics.DrawEllipse(System.Drawing.Pens.Black, rectangle);

        }

我错过了什么?

3 个答案:

答案 0 :(得分:2)

矩形x / y是包含椭圆的矩形的左上角。如果绘制较大的圆圈,则还需要移动边界矩形。

        for (int x = 0; x < 20; x++)
        {
            System.Drawing.Graphics graphics = e.Graphics;
            System.Drawing.Rectangle rectangle = new System.Drawing.Rectangle(xpos - 10 - x / 2, ypos - 10 - x / 2, x, x);
            graphics.DrawEllipse(System.Drawing.Pens.Black, rectangle);

        }

答案 1 :(得分:1)

如果您希望圆圈是以等中心为单位的,则还需要将矩形的XY设置为左侧。

因此:

Rectangle rectangle = new Rectangle(xpos-10-x/2, ypos-10-y/2, x, x);

另一方面,你不会看到圈子增长。由于PictureBox仅在之后交换缓冲区所有绘图完成。您需要的是刷新事件,并使用时间来确定下一个圆的大小。

答案 2 :(得分:1)

您在矩形内绘制圆圈,当您只增加矩形的高度和宽度时,您也可以将中心移动到右侧和底部。 此外,重用图形以获得更好的性能

using (var graphics = box.CreateGraphics())
{

    for (int x = 0; x < 20; x++)
    {
        System.Drawing.Rectangle rectangle = new System.Drawing.Rectangle(xpos-10-x/2, ypos-10-x/2, x, x);
        graphics.DrawEllipse(System.Drawing.Pens.Black, rectangle);

    }
}