求:谁有RGB-HSB值互转换的算法?谢谢!!!
。。。 问题点数:0、回复次数:6Top
1 楼crazybit(bit狂)回复于 2003-02-02 13:33:55 得分 0
H(hue) - S(saturation) -
B == ???Top
2 楼zyl910(编程的乐趣在于编程控制硬件,与用图形学实现绚丽效果)回复于 2003-02-04 10:11:16 得分 0
HSB=HSL
B(L):亮度Top
3 楼ehom(?!)回复于 2003-02-05 03:53:06 得分 0
HSB!=HSL,HSB=HSV(V或B是明度,不是亮度)
max=max(R,G,B)//取RGB中的最大值
min=min(R,G,B)//取RGB中的最小值
if R = max, H = (G-B)/(max-min)
if G = max, H = 2 + (B-R)/(max-min)
if B = max, H = 4 + (R-G)/(max-min)
H = H * 60
if H < 0, H = H + 360
V=max(R,G,B)/256
S=(max-min)/max
H为角度数,S、B表示出来可化为百分数(乘100取整)!Top
4 楼bojinyu(沙鱼)回复于 2003-02-09 11:20:10 得分 0
// Color.h: interface for the CColor class.
//颜色类
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_COLOR_H__33D81BED_1B84_4313_B3B0_E2E83767792B__INCLUDED_)
#define AFX_COLOR_H__33D81BED_1B84_4313_B3B0_E2E83767792B__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
typedef enum
{
COLOR_RGB,
COLOR_HLS
}COLOR_FAMILY; //颜色空间
class CColor
{
private:
typedef enum{RED,GREEN,BLUE};
UCHAR Value(DOUBLE m1,DOUBLE m2,DOUBLE h)
{
while(h>360)
h-=360;
while(h<0)
h+=360;
if(h<60)
m1=m1+(m2-m1)*h/60;
else if(h<180)
m1=m2;
else if(h<240)
m1=m1+(m2-m1)*(240-h)/60;
return (UCHAR)(m1*255);
}
public:
CColor();
virtual ~CColor();
COLORREF HLS2RGB(DOUBLE Lightness,DOUBLE Saturation,DOUBLE Hue)
{
UCHAR red,green,blue;
if(Saturation==0)
{
red=green=blue=(UCHAR)(Lightness*255);
}
else
{
DOUBLE m1,m2;
if(Lightness<=0.5)
m2=Lightness*(1+Saturation);
else
m2=Lightness+Saturation*(1-Lightness);
m1=2*Lightness-m2;
red=Value(m1,m2,Hue+120);
green=Value(m1,m2,Hue);
blue=Value(m1,m2,Hue-120);
}
return RGB(red,green,blue);
}
BOOL RGB2HLS(COLORREF RGBclr,DOUBLE &Lightness,DOUBLE &Saturation,DOUBLE &Hue)
{
DOUBLE mn,mx;
INT major;
INT Red,Green,Blue;
Red= RGBclr && 0x000000FF;
Green=( RGBclr && 0x0000FF00)>>8;
Blue=( RGBclr && 0x00FF0000)>>16;
if(Red<Green)
{
mn=Red;mx=Green;major=GREEN;
}
else
{
mn=Green;mx=Red;major=RED;
}
if(Blue<mn)
{
mn=Blue;
}
else
{
mx=Blue;major=BLUE;
}
if(mn==mx)
{
Lightness=mn/255;
Saturation=0;
Hue=0;
}
else
{
Lightness=(mn+mx)/510;
if(Lightness<=0.5)
{
Saturation=(mx-mn)/(mn+mx);
}
else
{
Saturation=(mx-mn)/(510-mn-mx);
}
switch(major)
{
case RED:
Hue=(Green-Blue)*60/(mx-mn)+360;
break;
case GREEN:
Hue=(Blue-Red)*60/(mx-mn)+120;
break;
case BLUE:
Hue=(Red-Green)*60/(mx-mn)+240;
break;
}
if(Hue>360) Hue=Hue-360;
}
}
};
#endif // !defined(AFX_COLOR_H__33D81BED_1B84_4313_B3B0_E2E83767792B__INCLUDED_)
Top
5 楼bojinyu(沙鱼)回复于 2003-02-09 11:22:46 得分 0
上面的写错了一点点
// Color.h: interface for the CColor class.
//颜色类
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_COLOR_H__33D81BED_1B84_4313_B3B0_E2E83767792B__INCLUDED_)
#define AFX_COLOR_H__33D81BED_1B84_4313_B3B0_E2E83767792B__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
typedef enum
{
COLOR_RGB,
COLOR_HLS
}COLOR_FAMILY; //颜色空间
class CColor
{
private:
typedef enum{RED,GREEN,BLUE};
UCHAR Value(DOUBLE m1,DOUBLE m2,DOUBLE h)
{
while(h>360)
h-=360;
while(h<0)
h+=360;
if(h<60)
m1=m1+(m2-m1)*h/60;
else if(h<180)
m1=m2;
else if(h<240)
m1=m1+(m2-m1)*(240-h)/60;
return (UCHAR)(m1*255);
}
public:
CColor();
virtual ~CColor();
COLORREF HLS2RGB(DOUBLE Lightness,DOUBLE Saturation,DOUBLE Hue)
{
UCHAR red,green,blue;
if(Saturation==0)
{
red=green=blue=(UCHAR)(Lightness*255);
}
else
{
DOUBLE m1,m2;
if(Lightness<=0.5)
m2=Lightness*(1+Saturation);
else
m2=Lightness+Saturation*(1-Lightness);
m1=2*Lightness-m2;
red=Value(m1,m2,Hue+120);
green=Value(m1,m2,Hue);
blue=Value(m1,m2,Hue-120);
}
return RGB(red,green,blue);
}
BOOL RGB2HLS(COLORREF RGBclr,DOUBLE &Lightness,DOUBLE &Saturation,DOUBLE &Hue)
{
DOUBLE mn,mx;
INT major;
INT Red,Green,Blue;
Red= RGBclr & 0x000000FF;
Green=( RGBclr & 0x0000FF00)>>8;
Blue=( RGBclr & 0x00FF0000)>>16;
if(Red<Green)
{
mn=Red;mx=Green;major=GREEN;
}
else
{
mn=Green;mx=Red;major=RED;
}
if(Blue<mn)
{
mn=Blue;
}
else
{
mx=Blue;major=BLUE;
}
if(mn==mx)
{
Lightness=mn/255;
Saturation=0;
Hue=0;
}
else
{
Lightness=(mn+mx)/510;
if(Lightness<=0.5)
{
Saturation=(mx-mn)/(mn+mx);
}
else
{
Saturation=(mx-mn)/(510-mn-mx);
}
switch(major)
{
case RED:
Hue=(Green-Blue)*60/(mx-mn)+360;
break;
case GREEN:
Hue=(Blue-Red)*60/(mx-mn)+120;
break;
case BLUE:
Hue=(Red-Green)*60/(mx-mn)+240;
break;
}
if(Hue>360) Hue=Hue-360;
}
}
};
#endif // !defined(AFX_COLOR_H__33D81BED_1B84_4313_B3B0_E2E83767792B__INCLUDED_)
Top
相关问题
- RGB-HSB-CMYK-Lab转换算法,Photoshop Colorpicker实现方法,欢迎图形图像高手进来讨论!
- 谁给我一个颜色转换的算法(RGB to 256color)
- 谁知道色彩格式RGB与HSV的转换公式(算法也可)?
- 求:RGB和HSL,YUV,YCbCr,Gamma等常用色系之间的转换算法.
- 求:RGB和HSL,YUV,YCbCr,Gamma等常用色系之间的转换算法.
- rgb和cmyk,还有hsb之间的转换
- 请教关于java.awt.Color的HSB和RGB模型的转换
- 急求HSB(HSV)转换为RGB的解决办法
- 急求HSB(HSV)转换为RGB的解决办法
- 如何将以下ASP算法转换成C#算法




