我试图在c#中绘制具有浮点值的东西,但我没有成功

时间:2011-11-03 23:04:19

标签: c# graphics

我想使用以下代码在winform上绘制一些排序图形:

private void button1_Click(object sender, EventArgs e)
        {
            Pen myPen = new System.Drawing.Pen(Color.Red);
            Graphics handler = this.CreateGraphics();


            double[] nextPt = new double[2];
            double[] maurerPt = new double[2];
            for (int index = 1; index < 361; index++)
            {
                nextPt = calcRose(index * d);

                //this line is incorrect but Drawline only accept Point which is int
                //and valued are in fractions thats why I use double
                handler.DrawLine(maurerPt[0], maurerPt[1], nextPt[0], nextPt[1];

                nextPt.CopyTo(maurerPt,2);
            }

            myPen.Dispose();
            handler.Dispose();

        }

问题是我想创建某种称为“maruer rose”的数学图形 因为我的行值是分数所以我不能使用它只接受int值的Point

如何使用double或float值提供drawline?

问候。

1 个答案:

答案 0 :(得分:3)

汉斯应该把他的评论作为答案发布,但他对两个账户都是正确的。 <{1}}有一个接受DrawLine()的重载,所以这不是问题。

您的下一个问题将是弄清楚为什么您的图表似乎随机消失。您应该在Control的Paint事件中执行绘图的 all ,或者,如果在派生类中,通过覆盖PointF,始终绘制到提供的Graphics对象(OnPaint())。

有时你的控制会重新粉碎自己,也许是因为它被最小化了,它的尺寸发生了变化,无论如何。您的代码仅在单击按钮时绘制,这意味着强制重新绘制的系统将消除您的图形。

接下来,您的代码有潜在的内存“泄漏”。如果创建pen / Graphics对象并在它们上面调用Dispose(),会发生什么?在这种特定情况下,您的程序可能会崩溃,但一般而言,更重要的是,您的e.Graphics调用不会发生,并且您暂时“泄露”了一些本机资源。

您应该在Dispose()语句中包含实现IDisposable的类型的创建,即

using

这个构造实际上是一个try / finally块,所以即使curlies中的某个东西抛出异常using( var myPen = new System.Drawing.Pen(Color.Red) ) using( var handler = this.CreateGraphics() ) { // use 'myPen' and 'handler' here } 仍然会被调用。