C# RGB格式与HBS格式颜色互转

2023-12-13 21:08

本文主要是介绍C# RGB格式与HBS格式颜色互转,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

代码如下: 

RGB->HSB[float类型版本]

/// <summary>   
/// HSB用float数据类型表示   
/// </summary>   
static void RGB2HSB(int r, int g, int b, out float hue, out float sat, out float bri)   
{   int minval = Math.Min(r, Math.Min(g, b));   int maxval = Math.Max(r, Math.Max(g, b));   //bri   bri = (float)(maxval + minval) / 510;   //sat   if (maxval == minval)   {   sat = 0.0f;   }   else   {   int sum = maxval + minval;   if (sum > 255)   {   sum = 510 - sum;   }   sat = (float)(maxval - minval) / sum;   }   //hue   if (maxval == minval)   {   hue = 0.0f;   }   else   {   float diff = (float)(maxval - minval);   float rnorm = (maxval - r) / diff;   float gnorm = (maxval - g) / diff;   float bnorm = (maxval - b) / diff;   hue = 0.0f;   if (r == maxval)   {   hue = 60.0f * (6.0f + bnorm - gnorm);   }   if (g == maxval)   {   hue = 60.0f * (2.0f + rnorm - bnorm);   }   if (b == maxval)   {   hue = 60.0f * (4.0f + gnorm - rnorm);   }   if (hue > 360.0f)   {   hue = hue - 360.0f;   }   }   
}   
RGB->HSB[int版本]

/// <summary>   
/// HSB用int数据类型表示,同Winform中的ColorDialog中HSB的表示   
/// </summary>   
static void RGB2HSB(int r, int g, int b, out int hue, out int sat, out int bri)   
{   float fHue, fSat, fBri;   RGB2HSB(r, g, b, out fHue, out fSat, out fBri);   hue = (int)((fHue / 360.0f) * 240 + 0.5);   sat = (int)(fSat * 241 + 0.5);   bri = (int)(fBri * 241 + 0.5);   if (hue > 239)   {   hue = 239;   }   if (sat > 240)   {   sat = 240;   }   if (bri > 240)   {   bri = 240;   }   
}   
HSB->RGB

/// <summary>   
/// 传入的HSB用int型表示,如果用float型表示,可将下面的转换成float过程去掉   
/// </summary>   
static void HSB2RGB(int hue, int sat, int bri, out int r, out  int g, out int b)   
{   //begin:HSB转换为float   if (hue > 239)   {   hue = 239;   }   else   {   if (hue < 0)   {   hue = 0;   }   }   if (sat > 240)   {   sat = 240;   }   else   {   if (sat < 0)   {   sat = 0;   }   }   if (bri > 240)   {   bri = 240;   }   else   {   if (bri < 0)   {   bri = 0;   }   }   float H = hue / 239.0f;   float S = sat / 240.0f;   float L = bri / 240.0f;   //end:HSB转换为float   float red = 0, green = 0, blue = 0;   float d1, d2;   if (L == 0)   {   red = green = blue = 0;   }   else   {   if (S == 0)   {   red = green = blue = L;   }   else   {   d2 = (L <= 0.5f) ? L * (1.0f + S) : L + S - (L * S);   d1 = 2.0f * L - d2;   float[] d3 = new float[] { H + 1.0f / 3.0f, H, H - 1.0f / 3.0f };   float[] rgb = new float[] { 0, 0, 0 };   for (int i = 0; i < 3; i++)   {   if (d3[i] < 0)   {   d3[i] += 1.0f;   }   if (d3[i] > 1.0f)   {   d3[i] -= 1.0f;   }   if (6.0f * d3[i] < 1.0f)   {   rgb[i] = d1 + (d2 - d1) * d3[i] * 6.0f;   }   else   {   if (2.0f * d3[i] < 1.0f)   {   rgb[i] = d2;   }   else   {   if (3.0f * d3[i] < 2.0f)   {   rgb[i] = (d1 + (d2 - d1) * ((2.0f / 3.0f) - d3[i]) * 6.0f);   }   else   {   rgb[i] = d1;   }   }   }   }   red = rgb[0];   green = rgb[1];   blue = rgb[2];   }   }   red = 255.0f * red;   green = 255.0f * green;   blue = 255.0f * blue;   if (red < 1)   {   red = 0.0f;   }   else   {   if (red > 255.0f)   {   red = 255.0f;   }   }   if (green < 1)   {   green = 0.0f;   }   else   {   if (green > 255.0f)   {   green = 255.0f;   }   }   if (blue < 1)   {   blue = 0.0f;   }   else   {   if (blue > 255.0f)   {   blue = 255.0f;   }   }   r = (int)(red + 0.5);   g = (int)(green + 0.5);   b = (int)(blue + 0.5);   
}

这篇关于C# RGB格式与HBS格式颜色互转的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/489962

相关文章

C#读写文本文件的多种方式详解

《C#读写文本文件的多种方式详解》这篇文章主要为大家详细介绍了C#中各种常用的文件读写方式,包括文本文件,二进制文件、CSV文件、JSON文件等,有需要的小伙伴可以参考一下... 目录一、文本文件读写1. 使用 File 类的静态方法2. 使用 StreamReader 和 StreamWriter二、二进

在Linux中改变echo输出颜色的实现方法

《在Linux中改变echo输出颜色的实现方法》在Linux系统的命令行环境下,为了使输出信息更加清晰、突出,便于用户快速识别和区分不同类型的信息,常常需要改变echo命令的输出颜色,所以本文给大家介... 目python录在linux中改变echo输出颜色的方法技术背景实现步骤使用ANSI转义码使用tpu

C#中Guid类使用小结

《C#中Guid类使用小结》本文主要介绍了C#中Guid类用于生成和操作128位的唯一标识符,用于数据库主键及分布式系统,支持通过NewGuid、Parse等方法生成,感兴趣的可以了解一下... 目录前言一、什么是 Guid二、生成 Guid1. 使用 Guid.NewGuid() 方法2. 从字符串创建

C# 比较两个list 之间元素差异的常用方法

《C#比较两个list之间元素差异的常用方法》:本文主要介绍C#比较两个list之间元素差异,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. 使用Except方法2. 使用Except的逆操作3. 使用LINQ的Join,GroupJoin

Mysql常见的SQL语句格式及实用技巧

《Mysql常见的SQL语句格式及实用技巧》本文系统梳理MySQL常见SQL语句格式,涵盖数据库与表的创建、删除、修改、查询操作,以及记录增删改查和多表关联等高级查询,同时提供索引优化、事务处理、临时... 目录一、常用语法汇总二、示例1.数据库操作2.表操作3.记录操作 4.高级查询三、实用技巧一、常用语

利用Python脚本实现批量将图片转换为WebP格式

《利用Python脚本实现批量将图片转换为WebP格式》Python语言的简洁语法和库支持使其成为图像处理的理想选择,本文将介绍如何利用Python实现批量将图片转换为WebP格式的脚本,WebP作为... 目录简介1. python在图像处理中的应用2. WebP格式的原理和优势2.1 WebP格式与传统

使用Python和OpenCV库实现实时颜色识别系统

《使用Python和OpenCV库实现实时颜色识别系统》:本文主要介绍使用Python和OpenCV库实现的实时颜色识别系统,这个系统能够通过摄像头捕捉视频流,并在视频中指定区域内识别主要颜色(红... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间详解

OpenCV实现实时颜色检测的示例

《OpenCV实现实时颜色检测的示例》本文主要介绍了OpenCV实现实时颜色检测的示例,通过HSV色彩空间转换和色调范围判断实现红黄绿蓝颜色检测,包含视频捕捉、区域标记、颜色分析等功能,具有一定的参考... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间

苹果macOS 26 Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色

《苹果macOS26Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色》在整体系统设计方面,macOS26采用了全新的玻璃质感视觉风格,应用于Dock栏、应用图标以及桌面小部件等多个界面... 科技媒体 MACRumors 昨日(6 月 13 日)发布博文,报道称在 macOS 26 Tahoe 中

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五