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日

相关文章

  • Android开源项目PullToRefresh下拉刷新功能详解

    Android开源项目PullToRefresh下拉刷新功能详解 PullToRefresh简介 PullToRefresh是一款在Android平台上使用的可拓展、易定制下拉刷新控件,现在已经迁移至AndroidX。PullToRefresh支持下拉刷新和上拉加载更多功能,非常适用于数据列表的情况。 导入PullToRefresh库 PullToRefre…

    C# 2023年6月6日
    00
  • C#实现虚拟键盘的实例详解

    C#实现虚拟键盘的实例详解 介绍 C#可以使用Windows API实现虚拟键盘,可以在程序中模拟用户输入按键,适用于自动化测试、快捷键的实现等应用场景。 实现步骤 1. 引用Windows API库 在C#中,需要引用Windows API库来实现虚拟键盘功能。可以使用DllImport指令引入User32.dll库,该库包含了Windows API中的键…

    C# 2023年6月6日
    00
  • C# 创建控制台应用程序

    C#创建控制台应用程序的完整攻略 在C#中,控制台应用程序是一种常见的应用程序类型,可以在命令行中运行。本文将提供一个完整的C#创建控制台应用程序的攻略,包括创建、编译、运行、调试等操作。 步骤1:创建控制台应用程序 要创建控制台应用程序,可以按照以下步骤操作: 打开Visual Studio。 选择“文件”->“新建”->“项目”。 在“新建项…

    C# 2023年5月15日
    00
  • Netcore Webapi返回数据的三种方式示例

    下面我来介绍一下“Netcore Webapi返回数据的三种方式示例”的完整攻略。 概述 在开发Webapi时经常需要返回各种数据,例如字符串、Json格式数据、XML格式数据、二进制文件、图片等等。本篇文章将介绍Netcore Webapi返回数据的三种方式示例,分别为返回字符串、返回Json格式数据和返回文件。 返回字符串 在Webapi中,返回字符串最…

    C# 2023年6月3日
    00
  • C#实现几十万级数据导出Excel及Excel各种操作实例

    C#实现几十万级数据导出Excel及Excel各种操作实例 在C#中,我们可以使用第三方库EPPlus来处理Excel文件。以下是几步实现几十万级数据导出Excel的完整攻略: 步骤一:安装EPPlus库 我们可以在NuGet中添加EPPlus库,或是通过官方网站下载最新版。 步骤二:创建Excel文件 我们可以通过以下代码来创建一个Excel文件及相关信息…

    C# 2023年6月7日
    00
  • C# 正则表达式经典分类整理集合手册

    下面是对于“C#正则表达式经典分类整理集合手册”的完整攻略。 什么是正则表达式 正则表达式是一种针对文本进行匹配和替换的强大工具,使用正则表达式可以更快、更准确的进行字符串操作。C#自带了正则表达式相关的类库,可以直接进行使用。 正则表达式的语法 正则表达式的语法相对比较复杂,需要花费一定的时间学习和掌握。下面是几个常见的符号和语法结构: .:匹配除换行符以…

    C# 2023年5月15日
    00
  • C#异步调用示例详解

    下面是关于“C#异步调用示例详解”的完整攻略,包含两个示例。 1. C#异步调用简介 在C#中,可以使用异步调用来执行长时间运行的操作,例如网络请求或数据库查询。异步调用可以提高应用程序的响应性能,因为它允许应用程序在等待操作完成时继续执行其他任务。 2. 使用async和await关键字进行异步调用 可以使用async和await关键字来执行异步调用。以下…

    C# 2023年5月15日
    00
  • html5实现的便签特效(实战分享)

    HTML5提供了许多新的特性,可以实现各种各样的特效。本攻略将介绍如何使用HTML5实现便签特效。以下是实现便签特效的完整攻略。 实现便签特效 以下是使用HTML5实现便签特效的步骤: 步骤1:创建HTML文件 在HTML文件中添加以下代码: <!DOCTYPE html> <html> <head> <meta c…

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