C#实现简易灰度图和酷炫HeatMap热力图winform(附DEMO)

C#实现简易灰度图和酷炫HeatMap热力图winform(附DEMO)

简介

本教程将介绍如何使用C#实现简易的灰度图和酷炫的HeatMap热力图,本文不会涉及高级算法和复杂的图形渲染过程,并且提供代码示例和详细说明来帮助读者快速学习和应用。

实现

我们首先需要准备一个WinForm窗体,并安装Microsoft Chart controlsBitmapExtensions nuget包。

简易的灰度图

using System.Drawing;
using System.Windows.Forms.DataVisualization.Charting;
using Accord.Extensions.Imaging;

namespace GrayScaleImageDemo
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            var image = Properties.Resources.sample;
            var grayScaleImage = image.ToGray();
            DrawGraph(chart1, grayScaleImage, Color.Black);
        }

        private void DrawGraph(Chart chart, Color[,] image, Color color)
        {
            chart.Series.Clear();
            chart.Series.Add("Series1");
            chart.Series["Series1"].ChartType = SeriesChartType.Point;
            for (int i = 0; i < image.GetLength(0); i++)
            {
                for (int j = 0; j < image.GetLength(1); j++)
                {
                    if (image[i, j].R == color.R && image[i, j].G == color.G && image[i, j].B == color.B)
                    {
                        chart.Series["Series1"].Points.AddXY(j, i);
                    }
                }
            }
            chart.BackColor = color;
            chart.ChartAreas[0].AxisX.Enabled = AxisEnabled.False;
            chart.ChartAreas[0].AxisY.Enabled = AxisEnabled.False;
        }
    }
}

这段代码展示了如何将一个彩色图转换为灰度图,并使用Chart控件在窗体中绘制出来。可以看到整个过程非常简单,使用Accord.Extensions.Imaging包提供的ToGray()方法即可实现图像的灰度化,然后使用DrawGraph()方法将灰度图上的每个像素绘制出来即可,将黑色背景作为参数传递给DrawGraph()方法,以达到更好的效果。

酷炫的HeatMap热力图

using System.Drawing;
using System.Windows.Forms.DataVisualization.Charting;

namespace HeatMapDemo
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            var palette = new Color[] { Color.Blue, Color.Green, Color.Yellow, Color.Orange, Color.Red };
            var data = new[,] { { 1, 2, 3, 4 }, { 2, 3, 4, 1 }, { 3, 4, 1, 2 }, { 4, 1, 2, 3 } };
            DrawHeatMap(chart1, data, palette);
        }

        private void DrawHeatMap(Chart chart, int[,] data, Color[] palette, int cellSize = 30)
        {
            chart.Series.Clear();
            chart.ChartAreas.Clear();
            chart.ChartAreas.Add("HeatMap");
            int rowIndex = 0;
            int colIndex = 0;
            for (int i = 0; i < data.GetLength(0); i++)
            {
                for (int j = 0; j < data.GetLength(1); j++)
                {
                    chart.Series.Add($"Cell_{i}_{j}");
                    chart.Series[$"Cell_{i}_{j}"].ChartType = SeriesChartType.Point;
                    chart.Series[$"Cell_{i}_{j}"].Points.AddXY(colIndex * cellSize, rowIndex * cellSize);
                    chart.Series[$"Cell_{i}_{j}"].Color = palette[data[i, j]];
                    colIndex++;
                }
                rowIndex++;
                colIndex = 0;
            }
            chart.ChartAreas[0].AxisX.Enabled = AxisEnabled.False;
            chart.ChartAreas[0].AxisY.Enabled = AxisEnabled.False;
            chart.ClientSize = new Size(data.GetLength(1) * cellSize, data.GetLength(0) * cellSize);
            chart.BackColor = Color.White;
        }
    }
}

这段代码展示了如何在窗体中使用Chart控件绘制酷炫的HeatMap热力图。我们需要提供一份数据集,数据集中每个元素都会与一个颜色关联。同时还需要提供一个颜色数组来表示不同颜色与数据集中的元素对应关系。在代码中,我们首先创建一个Chart控件,并设置一个ChartArea,用于绘制表格。然后使用循环结构根据数据集中的元素绘制出对应的图形,最后将窗口大小设置为数据集的大小乘上每个单元格的大小即可。通过改变数据集和颜色数组,我们可以快速地实现不同的HeatMap热力图。

总结

本教程展示了如何使用C#实现简易的灰度图和酷炫的HeatMap热力图,可以通过代码示例和详细说明来帮助读者快速学习和应用。教程中所提及到的BitmapExtensions和Microsoft Chart controls nuget包可以帮助开发者更方便地完成图像处理和绘图任务。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#实现简易灰度图和酷炫HeatMap热力图winform(附DEMO) - Python技术站

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

相关文章

  • C# 获取系统进程的用户名

    下面是关于如何用C#获取系统进程的用户名的完整攻略。 1. 获取系统进程列表 首先,我们需要获取当前系统中的进程列表。可以使用Process类的GetProcesses()方法来完成这个任务。该方法会返回一个Process类型的数组,其中每个元素表示一个系统进程。 下面是一个简单的示例代码: Process[] processlist = Process.G…

    C# 2023年6月7日
    00
  • 提供一个可以将DocX转为doc的文档转换器 地址

    首先需要明确的是,DocX是Word 2007以后版本才有的文件格式,而doc则是早期的版本格式,因此需要将DocX转换为doc格式的情况还是比较常见的。以下是一个可以将DocX转为doc的文档转换器的详细攻略。 1. 确定文档转换器类型 首先需要选择一个可以将DocX转为doc的文档转换器。当前比较常用的转换器有在线转换器和桌面软件两种,我们可以根据实际需…

    C# 2023年5月31日
    00
  • C# 如何合并和拆分PDF文件

    针对这个问题,我可以给你提供以下完整攻略: 前置要求 在进行C#合并和拆分PDF文件之前,我们需要先安装iTextSharp这个C# PDF处理库。你可以使用NuGet下载并安装iTextSharp,或者直接在Visual Studio中通过“引用”菜单添加对应的dll文件。 合并PDF文件 如果需要合并多个PDF文件,可以采取如下步骤进行处理: 第一步:新…

    C# 2023年6月6日
    00
  • asp.net下UTF-7转GB2312编码的代码(中文)

    下面是ASP.NET下UTF-7转GB2312编码的完整攻略。 什么是UTF-7编码和GB2312编码 UTF-7是一种基于ASCII的Unicode编码方案,使用7位ASCII码来传输Unicode字符,是一种比较特殊的编码方式。 GB2312是中华人民共和国颁布的简体中文编码字符集,它是由号称“中国文字信息处理第一人”、清华大学教授王儒林领导的设计小组设…

    C# 2023年5月31日
    00
  • C#中泛型举例List与DataTable相互转换

    C#中的泛型是一种类型参数化的机制,可以轻松创建复用性高、类型安全性强的代码。其中List和DataTable都是常见的泛型集合类型,本文将介绍如何在它们之间相互转换。 List转DataTable 首先,我们需要创建一个List类型的数据源作为例子,这里我们创建一个简单的Person类: public class Person { public strin…

    C# 2023年6月1日
    00
  • C# CopyTo(Array,Int32):从特定的索引开始将集合的元素复制到数组中

    C#中的 CopyTo 方法定义在 System.Array 类中。它允许将当前数组中的元素复制到另一个数组中。 CopyTo 方法有两个参数,第一个参数指定目标数组,第二个参数则指定从目标数组中的哪个位置开始复制。在本文中,我们将详细讲解 CopyTo 方法的完整攻略,并提供两个示例以便更好地理解它的工作原理。 语法 public void CopyTo(…

    C# 2023年4月19日
    00
  • C#构造函数在基类和父类中的执行顺序

    C#中的构造函数是用来初始化类中的成员变量的特殊方法。在类继承中,派生类会继承基类的构造函数,同时也可以自定义自己的构造函数。 构造函数在派生类的实例化过程中,会按照一定的规则执行基类和派生类中的构造函数,其执行顺序如下: 先执行基类的构造函数。 继续执行派生类的构造函数。 这个顺序是由 C# 引入的可靠构造函数(Reliable Constructor)原…

    C# 2023年6月7日
    00
  • c#基于WinForm的Socket实现简单的聊天室 IM

    下面是基于WinForm的Socket实现简单聊天室IM的完整攻略: 1. 项目开发前准备 1.1 工具准备 首先确保你已经安装了以下工具: .NET Framework(版本3.5及以上): .NET Framework是Windows应用程序开发所必需的。 1.2 环境准备 在开始聊天室开发之前,请确认以下环境已经正确配置: 计算机命名或IP地址 端口号…

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