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

本文关键字:成功 绘制 | 更新日期: 2023-09-27 18:13:33

我想用下面的代码在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"因为我的行值是分数所以我不能使用Point它只接受int值

我怎么能与双或浮点值馈送drawline ?

问候。

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

汉斯应该把他的评论作为答案,但是他在两个方面都是正确的。DrawLine()有一个接受PointF的过载,所以这不是问题。

你的下一个问题将是弄清楚为什么你的图形似乎随机消失。您应该在控件的Paint事件中执行所有的绘图,或者,如果在派生类中,通过重写OnPaint(),始终绘制到提供的图形对象(e.Graphics)。

有时你的控件会重新绘制自己,可能是因为它被最小化了,它的尺寸被改变了,等等。你的代码只在点击按钮时绘制,这意味着系统强制重新绘制将擦除你的图形。

接下来,你的代码有一个潜在的内存"泄漏"。如果在创建笔/图形对象和对它们调用Dispose()之间发生了什么?在这种特殊情况下,您的程序可能会崩溃,但一般来说,更重要的是,您不会调用Dispose(),并且您暂时"泄露"了一些本地资源。

你应该在using语句中包装实现IDisposable的类型的创建,即

using( var myPen = new System.Drawing.Pen(Color.Red) )
using( var handler = this.CreateGraphics() )
{
    // use 'myPen' and 'handler' here
}

这个结构实际上是一个try/finally块,所以即使curlies内部的东西抛出异常,Dispose()仍然会被调用。