C# 最快的方式以点阵画50000个直径2mm的白色圆 并能缩放
时间: 2024-02-11 12:03:49 浏览: 22
使用 C# 的 GDI+ 绘图库,可以实现快速绘制大量的圆,并且支持缩放。以下是一个简单的代码示例:
```csharp
using System;
using System.Drawing;
using System.Windows.Forms;
namespace PointArray
{
public partial class Form1 : Form
{
private int count = 50000; // 点的个数
private int diameter = 2; // 直径为 2mm
private float radius;
private PointF[] points;
public Form1()
{
InitializeComponent();
DoubleBuffered = true;
radius = diameter / 2f;
GeneratePoints();
}
private void GeneratePoints()
{
points = new PointF[count];
for (int i = 0; i < count; i++)
{
var x = (float)(ClientSize.Width * 0.1 + ClientSize.Width * 0.8 * i / count);
var y = (float)(ClientSize.Height * 0.1 + ClientSize.Height * 0.8 * i / count);
points[i] = new PointF(x, y);
}
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
// 设置绘图参数
var pen = new Pen(Color.White, 2); // 画笔颜色为白色,宽度为 2
// 绘制点
for (int i = 0; i < count; i++)
{
var rect = new RectangleF(points[i].X - radius, points[i].Y - radius, diameter, diameter);
e.Graphics.DrawEllipse(pen, rect);
}
}
private void Form1_Resize(object sender, EventArgs e)
{
GeneratePoints();
Invalidate();
}
private void Form1_MouseWheel(object sender, MouseEventArgs e)
{
diameter += e.Delta / 120;
radius = diameter / 2f;
GeneratePoints();
Invalidate();
}
}
}
```
在此示例中,我们首先在构造函数中生成所有的点,并将它们保存在一个数组中。在 `Form1_Paint` 方法中,我们使用 `DrawEllipse` 方法绘制每个圆。在 `Form1_Resize` 方法中,我们重新生成所有的点,并调用 `Invalidate` 方法来触发重绘。在 `Form1_MouseWheel` 方法中,我们根据鼠标滚轮的滚动调整圆的直径,并重新生成所有的点和半径。
注意,我们将 `radius` 定义为类成员变量,以便在每次调整圆的直径时更新它。这样可以避免在绘图循环中重复计算半径。
此外,我们还添加了一个 `Form1_Resize` 事件和一个 `Form1_MouseWheel` 事件,以支持缩放功能。在 `Form1_Resize` 事件中,我们重新生成所有的点,并调用 `Invalidate` 方法来触发重绘。在 `Form1_MouseWheel` 事件中,我们根据鼠标滚轮的滚动调整圆的直径,并重新生成所有的点和半径。这样可以实现简单的缩放功能。