先来了解一些概念:

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表示黑色,1表示特定饱和度的颜色)

后面地址是一个在线的观察RGB到HSB转换的工具:http://web.bentley.edu/empl/c/ncarter/MA307/color-converter.html

用RGB来表示颜色虽然方便,但是两个相近的颜色的RGB值却可能相差十万八千里。用HSV(Hue色相、Saturation饱和度、Value(Brightness)明度,也叫HSB)来表示颜色就比较符合人们的习惯。

RGB到HSV(HSB)的转换:

HSV(HSB)到RGB的转换:


根据以上说明,有以下转换公式(Java代码)

  1. public static float[] rgb2hsb(int rgbR, int rgbG, int rgbB) {
  2. assert 0 <= rgbR && rgbR <= 255;
  3. assert 0 <= rgbG && rgbG <= 255;
  4. assert 0 <= rgbB && rgbB <= 255;
  5. int[] rgb = new int[] { rgbR, rgbG, rgbB };
  6. Arrays.sort(rgb);
  7. int max = rgb[2];
  8. int min = rgb[0];
  9. float hsbB = max / 255.0f;
  10. float hsbS = max == 0 ? 0 : (max - min) / (float) max;
  11. float hsbH = 0;
  12. if (max == rgbR && rgbG >= rgbB) {
  13. hsbH = (rgbG - rgbB) * 60f / (max - min) + 0;
  14. } else if (max == rgbR && rgbG < rgbB) {
  15. hsbH = (rgbG - rgbB) * 60f / (max - min) + 360;
  16. } else if (max == rgbG) {
  17. hsbH = (rgbB - rgbR) * 60f / (max - min) + 120;
  18. } else if (max == rgbB) {
  19. hsbH = (rgbR - rgbG) * 60f / (max - min) + 240;
  20. }
  21. return new float[] { hsbH, hsbS, hsbB };
  22. }
  23. public static int[] hsb2rgb(float h, float s, float v) {
  24. assert Float.compare(h, 0.0f) >= 0 && Float.compare(h, 360.0f) <= 0;
  25. assert Float.compare(s, 0.0f) >= 0 && Float.compare(s, 1.0f) <= 0;
  26. assert Float.compare(v, 0.0f) >= 0 && Float.compare(v, 1.0f) <= 0;
  27. float r = 0, g = 0, b = 0;
  28. int i = (int) ((h / 60) % 6);
  29. float f = (h / 60) - i;
  30. float p = v * (1 - s);
  31. float q = v * (1 - f * s);
  32. float t = v * (1 - (1 - f) * s);
  33. switch (i) {
  34. case 0:
  35. r = v;
  36. g = t;
  37. b = p;
  38. break;
  39. case 1:
  40. r = q;
  41. g = v;
  42. b = p;
  43. break;
  44. case 2:
  45. r = p;
  46. g = v;
  47. b = t;
  48. break;
  49. case 3:
  50. r = p;
  51. g = q;
  52. b = v;
  53. break;
  54. case 4:
  55. r = t;
  56. g = p;
  57. b = v;
  58. break;
  59. case 5:
  60. r = v;
  61. g = p;
  62. b = q;
  63. break;
  64. default:
  65. break;
  66. }
  67. return new int[] { (int) (r * 255.0), (int) (g * 255.0),
  68. (int) (b * 255.0) };
  69. }

版权声明:本文为博主原创文章,未经博主允许不得转载。

RGB与HSB之间的转换公式的更多相关文章

  1. RGB与HSB之间转换

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

  2. RGB与HSV之间的转换公式及颜色表

    RGB & HSV 英文全称 RGB - Red, Green, Blue HSV - Hue, Saturation, Value HSV --> RGB 转换公式 HSV --> ...

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

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

  4. RGB和HSB的转换推算

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

  5. C# RGB和HSB相互转换

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

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

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

  7. c# 颜色RGB到HSB互相转换

    /// <summary> /// 色相,饱和度,亮度转换成rgb值 /// </summary> /// <returns></returns> pu ...

  8. 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 ...

  9. YUV/RGB与H264之间的编解码

    1.源码下载 http://download.videolan.org/x264/snapshots/ 2.编译 ./configure --prefix=./_install --enable-sh ...

随机推荐

  1. BZOJ 1297: [SCOI2009]迷路( dp + 矩阵快速幂 )

    递推式很明显...但是要做矩阵乘法就得拆点..我一开始很脑残地对于每一条权值v>1的边都新建v-1个节点去转移...然后就TLE了...把每个点拆成9个就可以了...时间复杂度O((9N)^3* ...

  2. java——数据库——commons-DbUtils

    Apache Commons DbUtils Tutorial The Apache Commons DbUtils library is a small set of classes designe ...

  3. 使用mybatis查询数据,按特定顺序排序

    有如下表table_people id          name 1          dwyane 2          james 3          paul 4          bosh ...

  4. jquery validationEngine 使用ajax验证不通过也提交表单

    转自 http://mylfd.iteye.com/blog/2007227 validationEngine给我们为前端的表单验证减少了很大的工作量.大部分情况我们使用validationEngin ...

  5. halcon与C#混合编程进阶版

    这篇主要是C#和Halcon的混合编程,在此基础上对按键不同功能的划分,以及图片适应窗口和从本地打开图片. 新手来这里:http://www.cnblogs.com/badguy518/p/55150 ...

  6. JAVA并发,锁与方法

    引自:<thinking in java> synchronized void f(){/* ... */}; synchronized void g(){/* ... */}; 所有对象 ...

  7. U盘中的闪存白片与黑片

    简单的说,黑片的概念主要用于芯片,白片的概念既用于芯片也用于闪存卡.黑片就是指芯片工厂选出的淘汰的次品,没有打上工厂标和芯片型号的芯片,这样的芯片都经过个种渠道流通到市场上来,现在很多U盘大厂大量的采 ...

  8. C# ADO基础(使用using操作数据库)

    1.使用using 来对数据库进行操作,using是资源释放的一种缩写,用于实现了实现了IDisposable接口(释放对象资源的接口是IDisposable) private void button ...

  9. java的控制流程

    1.顺序结构顺序结构就是指按语句执行的先后顺序,或者说语句出现的先后顺序逐条执行程序语句.语句块,完全是按照程序平台的执行约定进行的,比如第一个 HelloWorld程序:public class H ...

  10. php入门微理解

    1.php是什么?(来自百度百科) php:Hypertext preprocessor(超文本预处理器).一种开源脚本语言.主要用于web开发. 2.与其它语言的关系 介于HTML和C/C++,Ja ...