C#灰度图转伪彩色图







    /// <summary>/// 伪彩色图像构造器/// </summary>public class PseudoColorImageBuilder{/// <summary>/// 铁红色带映射表/// 每一行代表一个彩色分类,存放顺序是RGB/// </summary>public static byte[,] ironTable = new byte[128, 3] {{0,   0,  0},{0,   0,  0},{0,   0,  36},{0,   0,  51},{0,   0,  66},{0,   0,  81},{2,   0,  90},{4,   0,  99},{7,   0, 106},{11,   0, 115},{14,   0, 119},{20,   0, 123},{27,   0, 128},{33,   0, 133},{41,   0, 137},{48,   0, 140},{55,   0, 143},{61,   0, 146},{66,   0, 149},{72,   0, 150},{78,   0, 151},{84,   0, 152},{91,   0, 153},{97,   0, 155},{104,   0, 155},{110,   0, 156},{115,   0, 157},{122,   0, 157},{128,   0, 157},{134,   0, 157},{139,   0, 157},{146,   0, 156},{152,   0, 155},{157,   0, 155},{162,   0, 155},{167,   0, 154},{171,   0, 153},{175,   1, 152},{178,   1, 151},{182,   2, 149},{185,   4, 149},{188,   5, 147},{191,   6, 146},{193,   8, 144},{195,  11, 142},{198,  13, 139},{201,  17, 135},{203,  20, 132},{206,  23, 127},{208,  26, 121},{210,  29, 116},{212,  33, 111},{214,  37, 103},{217,  41,  97},{219,  46,  89},{221,  49,  78},{223,  53,  66},{224,  56,  54},{226,  60,  42},{228,  64,  30},{229,  68,  25},{231,  72,  20},{232,  76,  16},{234,  78,  12},{235,  82,  10},{236,  86,   8},{237,  90,   7},{238,  93,   5},{239,  96,   4},{240, 100,   3},{241, 103,   3},{241, 106,   2},{242, 109,   1},{243, 113,   1},{244, 116,   0},{244, 120,   0},{245, 125,   0},{246, 129,   0},{247, 133,   0},{248, 136,   0},{248, 139,   0},{249, 142,   0},{249, 145,   0},{250, 149,   0},{251, 154,   0},{252, 159,   0},{253, 163,   0},{253, 168,   0},{253, 172,   0},{254, 176,   0},{254, 179,   0},{254, 184,   0},{254, 187,   0},{254, 191,   0},{254, 195,   0},{254, 199,   0},{254, 202,   1},{254, 205,   2},{254, 208,   5},{254, 212,   9},{254, 216,  12},{255, 219,  15},{255, 221,  23},{255, 224,  32},{255, 227,  39},{255, 229,  50},{255, 232,  63},{255, 235,  75},{255, 238,  88},{255, 239, 102},{255, 241, 116},{255, 242, 134},{255, 244, 149},{255, 245, 164},{255, 247, 179},{255, 248, 192},{255, 249, 203},{255, 251, 216},{255, 253, 228},{255, 254, 239},{255, 255, 249},{255, 255, 249},{255, 255, 249},{255, 255, 249},{255, 255, 249},{255, 255, 249},{255, 255, 249},{255, 255, 249} };/// <summary>/// 彩虹色带映射表/// </summary>public static byte[,] rainTable = new byte[128, 3] {{0,   0,   0},{0,   0,   0},{15,   0,  15},{31,   0,  31},{47,   0,  47},{63,   0,  63},{79,   0,  79},{95,   0,  95},{111,   0, 111},{127,   0, 127},{143,   0, 143},{159,   0, 159},{175,   0, 175},{191,   0, 191},{207,   0, 207},{223,   0, 223},{239,   0, 239},{255,   0, 255},{239,   0, 250},{223,   0, 245},{207,   0, 240},{191,   0, 236},{175,   0, 231},{159,   0, 226},{143,   0, 222},{127,   0, 217},{111,   0, 212},{95,   0, 208},{79,   0, 203},{63,   0, 198},{47,   0, 194},{31,   0, 189},{15,   0, 184},{0,   0, 180},{0,  15, 184},{0,  31, 189},{0,  47, 194},{0,  63, 198},{0,  79, 203},{0,  95, 208},{0, 111, 212},{0, 127, 217},{0, 143, 222},{0, 159, 226},{0, 175, 231},{0, 191, 236},{0, 207, 240},{0, 223, 245},{0, 239, 250},{0, 255, 255},{0, 245, 239},{0, 236, 223},{0, 227, 207},{0, 218, 191},{0, 209, 175},{0, 200, 159},{0, 191, 143},{0, 182, 127},{0, 173, 111},{0, 164,  95},{0, 155,  79},{0, 146,  63},{0, 137,  47},{0, 128,  31},{0, 119,  15},{0, 110,   0},{15, 118,   0},{30, 127,   0},{45, 135,   0},{60, 144,   0},{75, 152,   0},{90, 161,   0},{105, 169,  0},{120, 178,  0},{135, 186,  0},{150, 195,  0},{165, 203,  0},{180, 212,  0},{195, 220,  0},{210, 229,  0},{225, 237,  0},{240, 246,  0},{255, 255,  0},{251, 240,  0},{248, 225,  0},{245, 210,  0},{242, 195,  0},{238, 180,  0},{235, 165,  0},{232, 150,  0},{229, 135,  0},{225, 120,  0},{222, 105,  0},{219,  90,  0},{216,  75,  0},{212,  60,  0},{209,  45,  0},{206,  30,  0},{203,  15,  0},{200,   0,  0},{202,  11,  11},{205,  23,  23},{207,  34,  34},{210,  46,  46},{212,  57,  57},{215,  69,  69},{217,  81,  81},{220,  92,  92},{222, 104, 104},{225, 115, 115},{227, 127, 127},{230, 139, 139},{232, 150, 150},{235, 162, 162},{237, 173, 173},{240, 185, 185},{242, 197, 197},{245, 208, 208},{247, 220, 220},{250, 231, 231},{252, 243, 243},{252, 243, 243},{252, 243, 243},{252, 243, 243},{252, 243, 243},{252, 243, 243},{252, 243, 243},{252, 243, 243}};/// <summary>/// 灰度图转伪彩色图像函数(通过映射规则计算的方法)/// </summary>/// <param name="src">24位灰度图</param>/// <returns>返回构造的伪彩色图像</returns>public static Bitmap PGrayToPseudoColor1(Bitmap src){try{Bitmap a = new Bitmap(src);Rectangle rect = new Rectangle(0, 0, a.Width, a.Height);System.Drawing.Imaging.BitmapData bmpData = a.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite, System.Drawing.Imaging.PixelFormat.Format24bppRgb);int stride = bmpData.Stride;unsafe{byte* pIn = (byte*)bmpData.Scan0.ToPointer();byte* P;int R, G, B;int temp = 0;for (int y = 0; y < a.Height; y++){for (int x = 0; x < a.Width; x++){P = pIn;B = P[0];G = P[1];R = P[2];temp = (byte)(B * 0.114 + G * 0.587 + R * 0.299);if (temp >= 0 && temp <= 63){P[2] = 0;P[1] = (byte)(254 - 4 * temp);P[0] = (byte)255;}if (temp >= 64 && temp <= 127){P[2] = 0;P[1] = (byte)(4 * temp - 254);P[0] = (byte)(510 - 4 * temp);}if (temp >= 128 && temp <= 191){P[2] = (byte)(4 * temp - 510);P[1] = (byte)(255);P[0] = (byte)0;}if (temp >= 192 && temp <= 255){P[2] = (byte)255;P[1] = (byte)(1022 - 4 * temp);P[0] = (byte)0;}pIn += 3;}pIn += stride - a.Width * 3;}}a.UnlockBits(bmpData);return a;}catch (Exception e){MessageBox.Show(e.Message.ToString());return null;}}/// <summary>/// 灰度图转伪彩色图像函数(通过查表的方法)/// </summary>/// <param name="src"></param>/// <param name="type">转换类型(1.使用铁红  2.使用彩虹)</param>/// <returns></returns>public static Bitmap PGrayToPseudoColor2(Bitmap src,int type){try{if (type == 1){Bitmap a = new Bitmap(src);Rectangle rect = new Rectangle(0, 0, a.Width, a.Height);System.Drawing.Imaging.BitmapData bmpData = a.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite, System.Drawing.Imaging.PixelFormat.Format24bppRgb);int stride = bmpData.Stride;unsafe{byte* pIn = (byte*)bmpData.Scan0.ToPointer();int  temp;byte R, G, B;for (int y = 0; y < a.Height; y++){for (int x = 0; x < a.Width; x++){temp = pIn[0]/2;R = ironTable[temp, 0];G = ironTable[temp, 1];B = ironTable[temp, 2];pIn[0] = B;pIn[1] = G;pIn[2] = R;pIn += 3;}pIn += stride - a.Width * 3;}}a.UnlockBits(bmpData);return a;}else if (type == 2){Bitmap a = new Bitmap(src);Rectangle rect = new Rectangle(0, 0, a.Width, a.Height);System.Drawing.Imaging.BitmapData bmpData = a.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite, System.Drawing.Imaging.PixelFormat.Format24bppRgb);int stride = bmpData.Stride;unsafe{byte* pIn = (byte*)bmpData.Scan0.ToPointer();int temp;byte R, G, B;for (int y = 0; y < a.Height; y++){for (int x = 0; x < a.Width; x++){temp = pIn[0] / 2;R = rainTable[temp, 0];G = rainTable[temp, 1];B = rainTable[temp, 2];pIn[0] = B;pIn[1] = G;pIn[2] = R;pIn += 3;}pIn += stride - a.Width * 3;}}a.UnlockBits(bmpData);return a;}else{throw new Exception("type 参数不合法!");}}catch (Exception e){MessageBox.Show(e.Message.ToString());return null;}}}



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/499544.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

砥志研思SVM(二) 拉格朗日乘子法与KKT条件

[1]最优化问题中的对偶性理论 [2]拉格朗日乘子法(上) [3]拉格朗日乘子法(下)

VS2015上配置opencv2.4.11

VS2015上配置opencv2.4.11版方法总结 最近给电脑重装了系统&#xff0c;需要的软件各种装。今天阅读了很多网上的博客&#xff0c;几经波折完成了opencv的配置。配置opencv与其他函数包或者软件相比算是麻烦的了&#xff0c;可能出现的问题也是五花八门&#xff0c;所以针对我的…

热传导方程的差分格式原理与matlab实现

function [ ] ParabolicEquation( h,k ) %求解抛物型方程中的一种&#xff1a;热传导方程 %h:x轴步长 %k:t轴步长rk/(h*h);%网格比 Mxfloor(1.0/h)1;%网格在x轴上的节点个数&#xff08;算上0&#xff09; Ntfloor(1.0/k)1;%网格在t轴上的节点个数&#xff08;算上0&#xff…

如何开发一个扫雷小游戏?

如何用C#开发一个扫雷小游戏&#xff1f; 十分自豪的说&#xff0c;计算机编程就是变魔术&#xff0c;每一个coder都是一个魔术师。 初学C#的时候&#xff0c;我相信很多人都和我一样&#xff0c;学会了基本语法&#xff0c;掌握了基本的数据结构&#xff0c;也见过了不少微软…

在emIDE中创建STM32项目

&#xfeff;emIDE是一个开源的嵌入式集成开发环境&#xff0c;基于Code::Blocks开发&#xff0c;能够支持多个平台和多个厂家的嵌入式硬件&#xff0c;继承了Code::Blocks的优点。 下载emIDE并安装&#xff0c;也可选择绿色版。若需要调试则需安装J-Link GDB Server。 1、打…

“Hello,Github!——如何配置并上传一个已有项目到Git上

“Hello&#xff0c;Github!"——如何配置并上传一个已有项目到Git上注意&#xff01;前言十分简短&#xff01;如今&#xff0c;Github已经成为了管理软件开发以及发现别人优秀代码的首选方法。所以还在等什么&#xff01;快点跟上脚步&#xff01;今天初次注册了Github账…

使用EmBitz开发STM32项目开发环境配置

&#xfeff;&#xfeff; 一、EmBitz软件获取与安装 1、EmBitz软件的获取 EmBitz原名Em::Blocks&#xff0c;是基于Code::Blocks开发的&#xff0c;面向嵌入式的C/C集成开发环境。支持J-Link和ST-Link调试器。使用J-Link仿真器时需安装J-Link GDB Server。 EmBitz下载地址&…

Python格式化输出方法

Python格式化输出 本文转自&#xff1a;Python格式化输出 今天写程序又记不清格式化输出细节了…… 索性整理一下。 python print格式化输出。 1. 打印字符串 print ("His name is %s"%("Aviad")) 效果&#xff1a; 2.打印整数 print ("He is %d yea…

基于STM32和W5500的Modbus TCP通讯

&#xfeff;&#xfeff; 在最近的一个项目中需要实现Modbus TCP通讯&#xff0c;而选用的硬件平台则是STM32F103和W5500&#xff0c;软件平台则选用IAR EWAR6.4来实现。 1、移植前的准备工作 为了实现Modbus TCP通讯首先需要下载W5500的驱动源码&#xff0c;可以到WIZnet的…

Python小练习1:.txt文件常用读写操作

.txt文件常用读写操作 本文通过一个实例来介绍读写txt文件的各种常用操作&#xff0c;问题修改自coursera上南京大学的课程&#xff1a;用Python玩转数据。 直接进入正题&#xff0c;考虑下面为练习读写txt文件的各种操作而设计的一个具体问题 问题如下&#xff1a; (1) 在任意…

STM32F103使用内部Flash保存参数

&#xfeff;&#xfeff; 在我们应用开发时&#xff0c;经常会有一些程序运行参数需要保存&#xff0c;如一些修正系数。这些数据的特点是&#xff1a;数量少而且不需要经常修改&#xff0c;但又不能定义为常量&#xff0c;因为每台设备可能不一样而且在以后还有修改的可能。…

Python序列类型常用函数练习:enumerate() reversed() sorted() zip()

Python序列类型常用函数练习 这里使用代码示例&#xff0c;练习使用序列类型的常用函数&#xff0c;包括&#xff1a; enumerate() reversed() sorted() zip() 直接看python代码 #enumerate--------------------------------------------------------------------- #enume…

FreeRTOS学习及移植笔记之一:开始FreeRTOS之旅

&#xfeff;&#xfeff; 1、必要的准备工作 工欲善其事&#xff0c;必先利其器&#xff0c;在开始学习和移植之前&#xff0c;相应的准备工作必不可少。所以在开始我们写要准备如下: 测试环境&#xff1a;我准备在STM32F103平台上移植和测试FreeRTOS系统 准备FreeRTOS系统…

Python小练习2:pandas.Dataframe使用方法示例demo

pandas.Dataframe使用方法示例demo 本文通过一个实例来介绍pandas.Dataframe的各种常用操作&#xff0c;问题总结并修改自coursera上南京大学的课程&#xff1a;用Python玩转数据。 直接进入正题&#xff0c;我们的示例首先调用matplotlib.finance包中提供的函数quotes_histor…

FreeRTOS学习及移植笔记之二:在IAR和STM32F103VET上移植FreeRTOS

&#xfeff;&#xfeff;上一次&#xff0c;我们简单的测试了FreeRTOS的基于IAR EWARMv6.4和STM32F103VET6平台的Demo&#xff0c;对其有了一个基本认识。接下来我们开始自己移植FreeRTOS的过程。 1、创建一个“FreeRTOSTestProject”项目文件夹&#xff0c;并在其下创建FreeR…

如何创建一个最简单的Windows桌面应用程序 (C++)

如何创建一个最简单的Windows桌面应用程序 (C) 最近刚开始学习C/C开发Windows应用程序&#xff0c;这里将会以零基础的视角把学习过程完全记录下来。如果你也刚刚起步&#xff0c;那本文一定非常适合你。 进入正题&#xff0c;本文讨论如何使用Visual Studio生成一个最简单的C窗…