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日

相关文章

  • C#操作配置文件app.config、web.config增删改

    C#操作配置文件app.config、web.config增删改可以使用System.Configuration命名空间中的ConfigurationManager和Configuration类。下面分别介绍这两个类的使用方法: 1.使用ConfigurationManager读写配置文件 ConfigurationManager类可以方便地读写配置文件,其…

    C# 2023年6月1日
    00
  • C++泛型编程Generic Programming的使用

    C++泛型编程Generic Programming的使用攻略 什么是泛型编程Generic Programming 泛型编程是一种以通用算法为基础写程序的方式,它在写程序时把算法和数据结构的实现分开,以达到复用代码的目的。C++中泛型编程主要通过模板来实现。 泛型编程的优点 可重用性:泛型编程可以复用代码,使用一个函数解决多个问题。 可扩展性:当在实现具体…

    C# 2023年6月7日
    00
  • ASP.NET MVC从控制器中获取URL值

    ASP.NET MVC是一个非常流行的Web应用程序框架,它可以帮助开发者创建开放式网络应用程序。在ASP.NET MVC中,我们可以利用控制器来获取URL的值,本篇攻略将为您提供详细的解释。 方法一:QueryString参数获取 我们可以使用Request对象的Querystring(查询字符串)来获取URL中的参数。查询字符串是指在 URL 中包含的键…

    C# 2023年5月31日
    00
  • Unity3D实现批量下载图片功能

    以下是Unity3D实现批量下载图片功能的完整攻略: 1. 准备工作 在开始实现批量下载图片功能之前,我们需要完成以下几个准备工作:1. 创建一个Unity3D项目。2. 确保已经下载了需要下载的图片,并且知道了图片的下载地址。 2. 使用C#实现批量下载图片功能 在Unity3D项目中,我们可以使用C#语言来实现批量下载图片的功能。具体的实现步骤如下: 2…

    C# 2023年6月3日
    00
  • 如何运行编译.NetCore的源码?

    作为.net的开发人员,为了能更好的code,我们要知其然并知其所以然,了解.netcore的源码是我们的基本素养✊ 源码地址 .NET Platform (github.com) 这个是.net在github上开源的源码地址aspnetcore 这个是.netcore的源码地址runtime 这个是运行时的源码地址,有些.netcore源码会依赖此运行时(…

    C# 2023年4月24日
    00
  • C#泛型和反射实例解析

    C#泛型和反射实例解析 在C#中,泛型和反射是两个非常重要的概念。泛型可以让我们编写高度通用的代码,而反射则可以让我们在运行时动态地获取类型信息和调用方法,非常适合特定的场景。本文将针对泛型和反射进行实例分析,为大家介绍它们的具体用法和场景。 泛型实例解析 1.泛型基本语法 泛型是C#4.0及以上版本的新特性。它能够在定义类、结构体、接口、方法等时,指定数据…

    C# 2023年5月31日
    00
  • 微信 getAccessToken方法详解及实例

    “微信 getAccessToken方法详解及实例”攻略 1. 什么是微信getAccessToken方法 在开发微信公众号或小程序等相关应用程序时,我们需要通过微信开放平台提供的API接口来获取许多微信相关资源。其中,getAccessToken方法是必不可少的一步,它可以用来获取access_token,即访问令牌,在访问一些微信资源时需要用到。 2. …

    C# 2023年5月31日
    00
  • C# PLINQ 内存列表查询优化历程

    C# PLINQ 内存列表查询优化历程 问题描述 我们有一个包含1千万个元素的列表,每个元素包含两个整数字段,需要进行查询和统计操作。最初使用普通的Linq查询,但在大数据情况下性能明显不足。 解决方案 我们使用PLINQ(Parallel LINQ,即并行LINQ)来优化查询。PLINQ是Linq的一个扩展,可以在多个线程中并行执行查询,提高查询效率。 步…

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