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#预处理指令之#line,#pragma warning 详细解析

    C#预处理指令之#line,#pragma warning 详细解析 在C#中,预处理指令(Preprocessor directives)是以井号 (#) 开头的,用于控制编译过程的指令。预处理指令会在编译代码之前就被处理,与实际代码无关。这些指令用于给编译器提供附加的信息或指令,以执行不同的编译选项。 本文将详细讲解两条常用的预处理指令:#line 和 …

    C# 2023年6月1日
    00
  • C#实现QQ截图功能及相关问题

    C#实现QQ截图功能及相关问题 1. 前言 在Windows系统下进行QQ截图是一种很常见的操作。开发人员可以使用C#语言来实现这个功能并且将其集成到自己的应用程序中。本文将详细讲解如何使用C#来实现QQ截图功能,是一篇有关屏幕截图技术的实用性文章。 2. 实现原理 C#实现QQ截图功能的原理与其他编程语言相同:获取屏幕的图像并对其进行编辑;接着将编辑后的图…

    C# 2023年6月6日
    00
  • C#预定义数据类型之值类型和引用类型介绍

    C#预定义数据类型之值类型和引用类型介绍 一、值类型和引用类型的区别 在C#中,数据类型可以分为值类型和引用类型两种。 值类型表示的是实际的值,它们被存储在堆栈中。当在一个方法中传递值类型之间的参数时,它们会被复制一份,因此赋予新值时不会影响原始的值。 值类型的数据包括: 布尔型(bool); 数字类型: 整型(byte、sbyte、short、ushort…

    C# 2023年5月31日
    00
  • C#设置软件开机自动运行的方法(修改注册表)

    下面是关于“C#设置软件开机自动运行的方法(修改注册表)”的完整攻略: 1. 前言 如果我们需要在电脑启动时自动运行我们编写的 C# 软件,可以使用修改注册表的方法实现。这种方法操作简单,但需要一定的系统基础知识,需要小心操作,以免造成系统损坏。本文将详细讲解如何使用 C# 代码来实现开机自动运行。 2. 实现方法 使用 C# 代码实现开机自动运行需要修改系…

    C# 2023年6月7日
    00
  • C# 如何设置label(标签)控件的背景颜色为透明

    首先我来详细讲解一下 “C# 如何设置label(标签)控件的背景颜色为透明” 的攻略吧。 1. 知识储备 在讲解攻略之前,我们需要了解一下C#中控件的样式。控件的样式通常有三种: Border,只有边框 Background,有背景颜色但没有边框 None,既没有边框也没有背景颜色 如果一个控件的样式是Background,则可以将它的背景颜色设置为透明。…

    C# 2023年6月6日
    00
  • JS实现按比例缩放图片的方法(附C#版代码)

    接下来我将详细讲解“JS实现按比例缩放图片的方法(附C#版代码)”的完整攻略。 1. 前言 当你需要在网站上展示图片时,通常需要在页面中调整图片的大小。但是,如果缩放不当,可能导致图片失真,影响用户体验。因此,本文将介绍一种JS实现按比例缩放图片的方法,避免图片失真。 2. 实现步骤 本方法分为以下几个步骤: 2.1 获取图片信息 首先,需要通过JS获取图片…

    C# 2023年5月31日
    00
  • C# mysql 插入数据,中文乱码的解决方法

    以下是C#操作MySQL数据库插入数据中文乱码的解决方法的详细攻略: 1. 设置数据库编码为utf8mb4 在创建数据库时,可以将字符集编码设置为utf8mb4,这样在插入中文数据时就不会出现乱码了。可以使用如下的sql语句: CREATE DATABASE your_database_name CHARACTER SET utf8mb4 COLLATE u…

    C# 2023年5月31日
    00
  • C#中的委托详解

    C#中的委托详解 委托的概念 委托是一种引用方法的类型,可以通过它来访问其他方法,与 C 或 C++ 中的函数指针类似。 委托可用于封装具有相同参数列表和返回类型的任何方法。委托比直接调用方法更灵活,更安全,因为委托不会直接访问外部方法的内部数据与其他资源。 委托的声明 以下是声明委托的通用语法: delegate return-type delegate-…

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