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         }
时间: 2025-01-01 10:19:25

c# 颜色RGB到HSB互相转换的相关文章

RGB,CMYK,HSB各种颜色表示的转换 C#语言

Introduction Why an article on "colors"? It's the same question I asked myself before writing this series. The fact is, in .NET, there are only two color formats that can be used: the RGB color model and the HSB color model. Those two are encaps

Javascript颜色rgb与16进制转换代码

Javascript实现颜色rgb与16进制转换的方法.分享给大家供大家参考.具体如下: Color(12,34,56); Color("#fff") Color("#defdcd") //颜色转换 var Color = function() {   if (!(this instanceof Color)) {    var color = new Color();    color._init.apply(color, arguments);    retur

C# RGB和HSB相互转换

背景 最近做的项目中有这样一个场景,设置任意一种颜色,得到这种颜色偏深和偏浅的两种颜色.也就是说取该颜色同色系的深浅两种颜色.首先想到的是调节透明度,但效果不理想.后来尝试调节颜色亮度,发现这才是正解.但是.NET中不能直接改变Color的亮度,需要将Color转换成HSB模式,然后改变B的值调节亮度.调节亮度后需要再转换成我们熟悉的RGB模式才能使用.下面给出颜色转换方法. 代码 1 /// <summary> 2 /// 颜色转换帮助类 3 /// </summary> 4 p

RGB与HSB之间的转换公式

先来了解一些概念: 1.RGB是一种加色模型,就是将不同比例的Red/Green/Blue混合在一起得到新颜色.通常RGB颜色模型表示为: 2.HSB(HSV) 通过色相/饱和度/亮度三要素来表达颜色. H(Hue):表示颜色的类型(例如红色,绿色或者黄色).取值范围为0—360.其中每一个值代表一种颜色. S(Saturation):颜色的饱和度.从0到1.有时候也称为纯度.(0表示灰度图,1表示纯的颜色) B(Brightness or Value):颜色的明亮程度.从0到1.(0表示黑色,

YUV / RGB 格式及快速转换算法

1 前言 自然界的颜色千变万化,为了给颜色一个量化的衡量标准,就需要建立色彩空间模型来描述各种各样的颜色,由于人对色彩的感知是一个复杂的生理和心理联合作用 的过程,所以在不同的应用领域中为了更好更准确的满足各自的需求,就出现了各种各样的色彩空间模型来量化的描述颜色.我们比较常接触到的就包括 RGB / CMYK / YIQ / YUV / HSI等等. 对于数字电子多媒体领域来说,我们经常接触到的色彩空间的概念,主要是RGB , YUV这两种(实际上,这两种体系包含了许多种具体的颜色表达方式和模

android 设置字体颜色、EditText自动输入转换成大写字母的多种方式

在TextView上面设置某一个字的字体颜色为指定颜色时,可以通过java类SpannableString类和Html语言来实现. (一)SpannableString类方式 private void setText(TextView t){ String text = t.getText().toString().trim(); SpannableString span = new SpannableString(text); span.setSpan(new ForegroundColorS

常用颜色RGB灰度值

常用颜色RGB.灰度值. 128/0/0 深红 255/0/0 红 255/0/255 粉红 255/153/204 玫瑰红 153/51/0 褐色 255/102/0 桔黄 255/153/0 浅桔黄 255/204/0 金色 255/204/153 棕黄 51/51/0 橄榄绿 128/128/0 深黄 153/204/0 酸橙色 255/255/0 黄色 255/255/153 浅黄 0/51/0 深绿 0/128/0 绿色 51/153/102 海绿 0/255/0 鲜绿 204/255

各种颜色RGB值【附c#中获取颜色的argb值】

各种颜色RGB值 ■RGB(255,192,203)■★●◆pink(粉红) ■RGB(220,20,60)■★●◆crimson(腥红) ■RGB(255,240,245)■★●◆lavenderblush(苍白的紫罗兰红) ■RGB(219,112,147)■★●◆palevioletred(脸红的淡紫红) ■RGB(255,105,180)■★●◆hotpink(热情的粉红) ■RGB(199,21,133)■★●◆mediumvioletred(适中的紫罗兰红) ■RGB(218,112

Android内置颜色及其它颜色RGB对照表

参考:http://blog.csdn.net/feiyangxiaomi/article/details/38338305 我们在平时开发时经常要用到各种颜色,有了下面这两张表,妈妈再也不用担心你的配色问题了. 一:内置颜色: public static final int BLACK Added in API level 1 Constant Value: -16777216 (0xff000000)        public static final int BLUE Added in