RGB和HSB的转换推算
2014-04-12 16:33
309 查看
RGB三原色是基于人肉眼对光线的生理作用。人眼内有三种椎状体“对这三种光线频率所能感受的带宽最大,也能独立刺激这三种颜色的受光体”,因此RGB称为三原色。比如,黄色波长的光对人眼的刺激效果,和红色与绿色同时刺激人眼相同,所以,对人来说R+G=yellow,即(255,255,0).
相对于RGB,HSB(也叫HSV)模式更便于描述人眼对与颜色的感觉。如图的HSB椎形坐标,横截面从下往上亮度值从0%到100%递增;横截面的中心点是灰色的,随着半径增大,饱和度从0增大到100%;色相取值0°~360°,代表截面上红、黄、绿、青、蓝、粉红的颜色变化。
View Code
相对于RGB,HSB(也叫HSV)模式更便于描述人眼对与颜色的感觉。如图的HSB椎形坐标,横截面从下往上亮度值从0%到100%递增;横截面的中心点是灰色的,随着半径增大,饱和度从0增大到100%;色相取值0°~360°,代表截面上红、黄、绿、青、蓝、粉红的颜色变化。
public float[] rgb2hsb(float[] rgb) { float[] hsb = new float[3]; float[] rearranged = rgb.clone(); int maxIndex = 0,minIndex = 0; float tmp; //将rgb的值从小到大排列,存在rearranged数组里 for(int i=0;i<2;i++) { for(int j=0;j<2-i;j++) if(rearranged[j]>rearranged[j+1]) { tmp=rearranged[j+1]; rearranged[j+1]=rearranged[j]; rearranged[j]=tmp; } } //rgb的下标分别为0、1、2,maxIndex和minIndex用于存储rgb中最大最小值的下标 for(int i=0;i<3;i++) { if(rearranged[0]==rgb[i]) minIndex=i; if(rearranged[2]==rgb[i]) maxIndex=i; } //算出亮度 hsb[2]=rearranged[2]/255.0f; //算出饱和度 hsb[1]=1-rearranged[0]/rearranged[2]; //算出色相 hsb[0]=maxIndex*120+60* (rearranged[1]/hsb[1]/rearranged[2]+(1-1/hsb[1])) *((maxIndex-minIndex+3)%3==1?1:-1); //防止色相为负值 hsb[0]=(hsb[0]+360)%360; return hsb; }
View Code
相关文章推荐
- RGB和HSB的转换推算
- RGB与HSB之间的转换公式
- RGB与HSB之间的转换公式
- RGB,CMYK,HSB各种颜色表示的转换
- RGB、HSB\HSV、HSL三种颜色空间的原理理解与转换
- RGB与HSB之间的转换公式
- VC编程实现色彩空间RGB与HSB(HSV)相互转换
- RGB和HSB转换
- RGB与HSB之间的转换公式
- 第一部分————RGB与HSB的数值转换关系:
- RGB与HSB之间转换
- RGB与HSB之间的转换公式
- » RGB与HSV(HSB)的转换公式 mybeky’s blog
- RGB与HSB之间的转换公式
- RGB、HSB、HSL互相转换
- 【C#】RGB,CMYK,HSB各种颜色表示的转换(转)
- 颜色模式转换 (RGB & HSB)
- RGB与HSB之间的转换公式
- VC编程实现色彩空间RGB与HSB(HSV)相互转换
- RGB、HSB、HSL 互相转换算法