C#实现绘制随机噪点和直线

请看下面:

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技术站

(0)
上一篇 2023年6月6日
下一篇 2023年6月6日

相关文章

  • .NET API 接口数据传输加密最佳实践记录

    以下是.NET API接口数据传输加密最佳实践记录的完整攻略: 1. 什么是API接口数据传输加密 API接口数据传输加密是指在API接口数据传输过程中,使用加密算法对数据进行加密,以保证数据的安全性和机密性。API接口数据传输加密可以防止黑客攻击、窃取数据、篡改数据等安全问题。 2. API接口数据传输加密的最佳实践 以下是API接口数据传输加密的最佳实践…

    C# 2023年5月12日
    00
  • visual studio 2013常用快捷键 VS2013快捷键大全

    Visual Studio 2013常用快捷键 VS2013快捷键大全 Visual Studio 2013是一个强大的开发工具,其丰富的快捷键让开发变得更加高效。以下是一些常用快捷键和使用技巧,以帮助你更好地使用Visual Studio 2013。 常用快捷键 以下是一些常用快捷键: Ctrl + C / Ctrl + V:复制和粘贴代码或文字。 Ctr…

    C# 2023年6月6日
    00
  • 关于C#中yield return用法的思考

    关于C#中yield return用法的完整攻略如下: 1. 什么是yield return yield return 是C#中的迭代器语法。简单来说,它允许我们一次性返回一组值的序列,而不需要在内存中维护它们的列表。 C# 的 yield 关键字使得我们可以定义一种流式处理的方式。被yield 关键字所标记的方法返回一个IEnumerable 接口对象,使…

    C# 2023年6月6日
    00
  • 一个很简单的jquery+xml+ajax的无刷新树结构(无css,后台是c#)

    让我来详细讲解一下“一个很简单的jquery+xml+ajax的无刷新树结构(无css,后台是c#)”的完整攻略。 什么是无刷新树结构? 无刷新树结构指的是在不刷新整个页面的情况下,实现树形结构的展示和交互。在这种情况下,仅更新部分页面内容,可以提高用户体验和页面响应速度。 实现步骤 1.准备工作 首先,你需要准备一些前置条件,包括: 1.包含jquery的…

    C# 2023年6月1日
    00
  • C#中abstract的用法详解

    C#中abstract的用法详解 简介 abstract 是C#中一个重要的关键字,表示抽象,它用于定义抽象类或抽象方法,是实现面向对象中重要的机制。一个抽象类不能被直接实例化,而只能作为基类被其他类继承。从抽象类继承的子类,必须实现该抽象类中的abstract方法,才能被实例化。在C#中,抽象类和抽象方法通常用于建立基础类和组件,使代码具有更强的可重用性。…

    C# 2023年5月15日
    00
  • C#用dynamic一行代码实现反射操作

    dynamic简介 dynamic是.NET Framework4.0的新特性。dynamic的出现让C#具有了弱语言类型的特性。编译器在编译的时候不再对类型进行检查,编译时默认dynamic对象支持你想要的任何特性。 dynamic简化反射实现 使用dynamic来简化反射实现是一种比较常见的编程技巧,它可以减少代码的复杂性并提高可读性。下面是一个使用dy…

    C# 2023年4月25日
    00
  • c#数组详解

    C#数组详解 什么是数组 数组是 C# 中最常用的一种数据结构,它可以用于存储同一种数据类型的多个元素。数组中的元素可以通过数组下标进行访问,下标从 0 开始计数。 数组定义和初始化 下面是定义和初始化一个数组的语法: 数据类型[] 数组名 = new 数据类型[数组长度]; 其中,数组类型可以为整型、字符型、浮点型、对象型(即自定义类)等。数组长度为整型数…

    C# 2023年5月31日
    00
  • c#中token的使用方法实例

    针对“c#中token的使用方法实例”,我可以提供以下攻略: 理解Token 在c#中,Token是一种数字签名,常用于验证数据的完整性和真实性。它是一种访问令牌,用于验证用户的身份和权限。通过Token,服务器可以验证用户的请求是否合法,并且可以防止一些常见的安全问题,如跨站脚本、CSRF等攻击。 Token的生成 Token的生成通常包括以下步骤: 密钥…

    C# 2023年5月31日
    00
合作推广
合作推广
分享本页
返回顶部