/// <summary>
/// 色相,饱和度,亮度转换成rgb值
/// </summary>
/// <returns></returns>
public static float[] HSB2RGB(float[] hsb)
{
if (hsb[] == )
{
hsb[] = ;
}
float[] rgb = new float[];
float r = ;
float g = ;
float b = ; if (hsb[] == )
{
r = g = b = hsb[];
}
else
{
float sectorPos = hsb[] / 60f;
int sectorNum = (int)Math.Floor(sectorPos);
float fractionalSector = sectorPos - sectorNum;
float p = hsb[] * ( - hsb[]);
float q = hsb[] * ( - (hsb[] * fractionalSector));
float t = hsb[] * ( - (hsb[] * ( - fractionalSector)));
switch (sectorNum)
{
case :
r = hsb[];
g = t;
b = p;
break;
case :
r = q;
g = hsb[];
b = p;
break;
case :
r = p;
g = hsb[];
b = t;
break;
case :
r = p;
g = q;
b = hsb[];
break;
case :
r = t;
g = p;
b = hsb[];
break;
case :
r = hsb[];
g = p;
b = q;
break;
} }
return new float[] { r * , g * , b * };
}
/// <summary>
/// 将rgb类型的颜色转换为hsb
/// </summary>
/// <param name="rgb"></param>
/// <returns></returns>
public static float[] RGB2HSB(float[] rgb)
{
float[] hsb = new float[];
float r = rgb[];
float g = rgb[];
float b = rgb[]; float max = Math.Max(r, Math.Max(g, b));
if (max <= )
{
return hsb;
}
float min = Math.Min(r, Math.Min(g, b));
float dif = max - min;
if (max > min)
{
if (g == max)
{
hsb[] = (b - r) / dif * 60f + 120f;
}
else if (b == max)
{
hsb[] = (r - g) / dif * 60f + 240f;
}
else if (b > g)
{
hsb[] = (g - b) / dif * 60f + 360f;
}
else
{
hsb[] = (g - b) / dif * 60f;
}
if (hsb[] < )
{
hsb[] = hsb[] + 360f;
}
}
else
{
hsb[] = ;
}
hsb[] = dif / max;
hsb[] = max / 255f;
return hsb;
}

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

  1. RGB与HSB之间转换

    先来了解一些概念: 1.RGB是一种加色模型,就是将不同比例的Red/Green/Blue混合在一起得到新颜色.通常RGB颜色模型表示为: 2.HSB(HSV) 通过色相/饱和度/亮度三要素来表达颜色 ...

  2. RGB和HSB的转换推算

    RGB三原色是基于人肉眼对光线的生理作用.人眼内有三种椎状体“对这三种光线频率所能感受的带宽最大,也能独立刺激这三种颜色的受光体”,因此RGB称为三原色.比如,黄色波长的光对人眼的刺激效果,和红色与绿 ...

  3. 【C#】RGB,CMYK,HSB各种颜色表示的转换(转)

    [C#]RGB,CMYK,HSB各种颜色表示的转换   一.表示颜色的方式有很多种,如RGB,CMYK,HSB,Hex等等 1.RGB:这种表示颜色由三原色构成,通过红,绿,蓝三种颜色分量的不同,组合 ...

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

    Introduction Why an article on "colors"? It's the same question I asked myself before writ ...

  5. C# RGB和HSB相互转换

    背景 最近做的项目中有这样一个场景,设置任意一种颜色,得到这种颜色偏深和偏浅的两种颜色.也就是说取该颜色同色系的深浅两种颜色.首先想到的是调节透明度,但效果不理想.后来尝试调节颜色亮度,发现这才是正解 ...

  6. RGB与HSB之间的转换公式

    先来了解一些概念: 1.RGB是一种加色模型,就是将不同比例的Red/Green/Blue混合在一起得到新颜色.通常RGB颜色模型表示为: 2.HSB(HSV) 通过色相/饱和度/亮度三要素来表达颜色 ...

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

    1 前言 自然界的颜色千变万化,为了给颜色一个量化的衡量标准,就需要建立色彩空间模型来描述各种各样的颜色,由于人对色彩的感知是一个复杂的生理和心理联合作用 的过程,所以在不同的应用领域中为了更好更准确 ...

  8. 常用icon以及color颜色RGB值和对应颜色效果图

    Android谷歌官方扁平化设计常用icon集合   Android谷歌官方扁平化设计color颜色RGB值和对应颜色效果图.

  9. e585. Converting Between RGB and HSB Colors

    This example demonstrates how to convert between a color value in RGB (three integer values in the r ...

随机推荐

  1. cs231n spring 2017 lecture8 Deep Learning Networks 听课笔记

    1. CPU vs. GPU: CPU核心少(几个),更擅长串行任务.GPU有很多核心(几千个),每一个核都弱,有自己的内存(几个G),很适合并行任务.GPU最典型的应用是矩阵运算. GPU编程:1) ...

  2. hackerrank Alex对战Fedor

    任意门 为了在漫长得飞行旅途中娱乐,Alex和Fedor发明了如下的一个简单的双人游戏.游戏是: 首先, Alex画一个有权无向图.该图中可能有多重边(多重边的权值可能相同或者不同). 然后,Fedo ...

  3. 基于Windows环境下cmd/编译器无法输入中文,显示中文乱码解决方案

    基于Windows环境下cmd/编译器无法输入中文,显示中文乱码解决方案 两个月前做C++课设的时候,电脑编译器编译结果出现了中文乱码,寻求了百度和大神们,都没有解决这个问题,百度上一堆解释是对编译器 ...

  4. 分布式监控系统--zabbix

    1Zabbix简介 Zabbix 是一个企业级的分布式开源监控方案. 2.监控系统架构 C/S架构 客户端/服务器端,这种架构适合规模较小,处于同一地域的环境 C/P/S 客户端/代理端/服务器端/, ...

  5. 浅谈localStorage、sessionStorage 与cookie

    由于工作的需要,今天使用了下localStorage.sessionStorage和cookie,感觉这玩意儿还挺好用的. 关于localStorage与sessionStorage的知识点以及用法之 ...

  6. c++---天梯赛---大笨钟

    ★题目: ★思路分析: 对可能的情况进行分类处理.在这里我把它们分成了3大类. ①不在敲钟时间 ②在敲钟时间但为整点 ③在敲钟时间且不为整点. 在敲钟时间段内我们可分别对晚8点前后进行分类讨论, 我们 ...

  7. tomcat实现热部署的配置

    p { margin-bottom: 0.25cm; direction: ltr; color: rgb(0, 0, 0); line-height: 120%; text-align: justi ...

  8. VUE之ECMAScript6(es6)

    es6:es:EMCAScript 6 (es2015)Emca:国际标准组织 1.常量和变量 const a = "hello" let:定义一个块级作用域的变量 需要先定义再使 ...

  9. SQL Server中字段类型对应的C#中的数据类型

      数据库  C#程序  int                int32  text string bigint int64 binary System.Byte[] bit Boolean cha ...

  10. TCP长连接和短连接的区别

    当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立是需要三次握手的,而释放则需 ...