c# 颜色RGB到HSB互相转换

简介: 原文:c# 颜色RGB到HSB互相转换 1 /// 2 /// 色相,饱和度,亮度转换成rgb值 3 /// 4 /// 5 public static float[] HSB2RGB(float[...
原文: c# 颜色RGB到HSB互相转换

  1 /// <summary>
  2         /// 色相,饱和度,亮度转换成rgb值
  3         /// </summary>
  4         /// <returns></returns>
  5         public static float[] HSB2RGB(float[] hsb)
  6         {
  7             if (hsb[0] == 360)
  8             {
  9                 hsb[0] = 0;
 10             }
 11             float[] rgb = new float[3];
 12             float r = 0;
 13             float g = 0;
 14             float b = 0;
 15 
 16             if (hsb[1] == 0)
 17             {
 18                 r = g = b = hsb[2];
 19             }
 20             else
 21             {
 22                 float sectorPos = hsb[0] / 60f;
 23                 int sectorNum = (int)Math.Floor(sectorPos);
 24                 float fractionalSector = sectorPos - sectorNum;
 25                 float p = hsb[2] * (1 - hsb[1]);
 26                 float q = hsb[2] * (1 - (hsb[1] * fractionalSector));
 27                 float t = hsb[2] * (1 - (hsb[1] * (1 - fractionalSector)));
 28                 switch (sectorNum)
 29                 {
 30                     case 0:
 31                         r = hsb[2];
 32                         g = t;
 33                         b = p;
 34                         break;
 35                     case 1:
 36                         r = q;
 37                         g = hsb[2];
 38                         b = p;
 39                         break;
 40                     case 2:
 41                         r = p;
 42                         g = hsb[2];
 43                         b = t;
 44                         break;
 45                     case 3:
 46                         r = p;
 47                         g = q;
 48                         b = hsb[2];
 49                         break;
 50                     case 4:
 51                         r = t;
 52                         g = p;
 53                         b = hsb[2];
 54                         break;
 55                     case 5:
 56                         r = hsb[2];
 57                         g = p;
 58                         b = q;
 59                         break;
 60                 }
 61 
 62             }
 63             return new float[] { r * 255, g * 255, b * 255 };
 64         }
 65         /// <summary>
 66         /// 将rgb类型的颜色转换为hsb
 67         /// </summary>
 68         /// <param name="rgb"></param>
 69         /// <returns></returns>
 70         public static float[] RGB2HSB(float[] rgb)
 71         {
 72             float[] hsb = new float[3];
 73             float r = rgb[0];
 74             float g = rgb[1];
 75             float b = rgb[2];
 76 
 77             float max = Math.Max(r, Math.Max(g, b));
 78             if (max <= 0)
 79             {
 80                 return hsb;
 81             }
 82             float min = Math.Min(r, Math.Min(g, b));
 83             float dif = max - min;
 84             if (max > min)
 85             {
 86                 if (g == max)
 87                 {
 88                     hsb[0] = (b - r) / dif * 60f + 120f;
 89                 }
 90                 else if (b == max)
 91                 {
 92                     hsb[0] = (r - g) / dif * 60f + 240f;
 93                 }
 94                 else if (b > g)
 95                 {
 96                     hsb[0] = (g - b) / dif * 60f + 360f;
 97                 }
 98                 else
 99                 {
100                     hsb[0] = (g - b) / dif * 60f;
101                 }
102                 if (hsb[0] < 0)
103                 {
104                     hsb[0] = hsb[0] + 360f;
105                 }
106             }
107             else
108             {
109                 hsb[0] = 0;
110             }
111             hsb[1] = dif / max;
112             hsb[2] = max / 255f;
113             return hsb;
114         }

 

目录
相关文章
|
C#
C# 图片RGB处理判断
C# 图片RGB处理判断 需要:根据一张原始图的RGB平均值和新的图片的RGB平均值的差距,来判断图中是否出现除原图中物体外的其他物体 前提:.Net framework 4.8 及以上 示例代码: 程序集:using System;using System.Drawing;using System.Drawing.Drawing2D;using System.Drawing.Imagin...
55 0
|
存储 监控 算法
Baumer工业相机堡盟工业相机使用BGAPI SDK将图像数据转换为Bitmap的几种方式(C#)(RGB)
Baumer工业相机堡盟工业相机使用BGAPI SDK将图像数据转换为Bitmap的几种方式(C#)(RGB)
109 0
|
算法 C# 计算机视觉
Win8 Metro(C#)数字图像处理--2.46图像RGB分量增强效果
原文:Win8 Metro(C#)数字图像处理--2.46图像RGB分量增强效果  [函数名称] RGB分量调整         RGBAdjustProcess(WriteableBitmap src, i...
929 0
|
7月前
|
开发框架 前端开发 .NET
C#编程与Web开发
【4月更文挑战第21天】本文探讨了C#在Web开发中的应用,包括使用ASP.NET框架、MVC模式、Web API和Entity Framework。C#作为.NET框架的主要语言,结合这些工具,能创建动态、高效的Web应用。实际案例涉及企业级应用、电子商务和社交媒体平台。尽管面临竞争和挑战,但C#在Web开发领域的前景将持续拓展。
203 3
|
7月前
|
SQL 开发框架 安全
C#编程与多线程处理
【4月更文挑战第21天】探索C#多线程处理,提升程序性能与响应性。了解C#中的Thread、Task类及Async/Await关键字,掌握线程同步与安全,实践并发计算、网络服务及UI优化。跟随未来发展趋势,利用C#打造高效应用。
200 3
|
25天前
|
C# 开发者
C# 一分钟浅谈:Code Contracts 与契约编程
【10月更文挑战第26天】本文介绍了 C# 中的 Code Contracts,这是一个强大的工具,用于通过契约编程增强代码的健壮性和可维护性。文章从基本概念入手,详细讲解了前置条件、后置条件和对象不变量的使用方法,并通过具体代码示例进行了说明。同时,文章还探讨了常见的问题和易错点,如忘记启用静态检查、过度依赖契约和性能影响,并提供了相应的解决建议。希望读者能通过本文更好地理解和应用 Code Contracts。
31 3
|
3月前
|
API C#
C# 一分钟浅谈:文件系统编程
在软件开发中,文件系统操作至关重要。本文将带你快速掌握C#中文件系统编程的基础知识,涵盖基本概念、常见问题及解决方法。文章详细介绍了`System.IO`命名空间下的关键类库,并通过示例代码展示了路径处理、异常处理、并发访问等技巧,还提供了异步API和流压缩等高级技巧,帮助你写出更健壮的代码。
46 2