请看下面:
C#实现绘制随机噪点和直线
第一步:创建窗体和画布
首先,在Visual Studio的菜单栏中选择:File -> New -> Project,在弹出的窗口中选择:Windows Forms App(.NET Framework),取一个有意义的名称,然后点击创建按钮。
接下来,在弹出的窗口中选择:Form,创建一个窗体。然后在窗体的属性窗口中找到DoubleBuffered属性,将它的值设置为True,在窗体中添加一个控件:Panel,并将Panel的Dock属性设置为Fill,这样就可以将Panel控件作为画布使用了。
第二步:绘制随机噪点
我们将在Panel控件中添加一个绘制随机噪点的代码。首先,在窗体的代码窗口中添加一个Random类的实例rand,例如:
Random rand = new Random();
然后,为Panel控件的Paint事件添加处理程序,在事件中添加以下代码:
private void panel1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
int w = panel1.Width;
int h = panel1.Height;
for (int i = 0; i < w * h / 100; i++)
{
int x = rand.Next(w);
int y = rand.Next(h);
Color c = Color.FromArgb(rand.Next(256), rand.Next(256), rand.Next(256));
g.FillRectangle(new SolidBrush(c), x, y, 1, 1);
}
}
这段代码使用了一个for循环来生成w * h / 100个随机噪点,每个噪点的颜色是随机生成的。
第三步:绘制直线
下面,我们将在Panel控件中添加一个绘制直线的代码。首先,在窗体的代码窗口中添加一个属性m_MouseDown,例如:
bool m_MouseDown = false;
接下来,为Panel控件的MouseDown、MouseMove和MouseUp事件添加处理程序,在事件中添加以下代码:
private void panel1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
m_MouseDown = true;
lastPoint = new Point(e.X, e.Y);
}
}
private void panel1_MouseMove(object sender, MouseEventArgs e)
{
if (m_MouseDown)
{
Graphics g = panel1.CreateGraphics();
Pen pen = new Pen(Color.Black, 2);
Point currentPoint = new Point(e.X, e.Y);
g.DrawLine(pen, lastPoint, currentPoint);
lastPoint = currentPoint;
}
}
private void panel1_MouseUp(object sender, MouseEventArgs e)
{
m_MouseDown = false;
}
这段代码使用了鼠标按下、移动和松开事件,实现了在Panel控件上绘制直线的效果。
至此,我们已经实现了绘制随机噪点和直线的功能。
示例说明:
- 示例一
在绘制界面的左侧提供几种色彩选项,让用户可以选择需要的颜色,这里使用了ColorDialog组件,在用户选择完颜色后,线条的颜色即改为了用户所选的颜色。
private void btnColor_Click(object sender, EventArgs e)
{
colorDialog1.Color = panel1.BackColor;
DialogResult result = colorDialog1.ShowDialog();
if (result == DialogResult.OK)
{
penColor = colorDialog1.Color;
}
}
private void panel1_MouseMove(object sender, MouseEventArgs e)
{
if (m_MouseDown)
{
Graphics g = panel1.CreateGraphics();
Pen pen = new Pen(penColor, 2);//改变Pen的颜色
Point currentPoint = new Point(e.X, e.Y);
g.DrawLine(pen, lastPoint, currentPoint);
lastPoint = currentPoint;
}
}
- 示例二
在绘图界面上增加一个“清空”按钮,让用户清除上一步或者整个绘图内容,这里用到了Panel的Invalidate()方法,用于强制Panel控件重绘:
private void btnClear_Click(object sender, EventArgs e)
{
Graphics g = panel1.CreateGraphics();
g.Clear(panel1.BackColor);
m_MouseDown = false;
}
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#实现绘制随机噪点和直线 - Python技术站