RGB到HSV转换的vc代码
作者:cnfgg 日期:2009-07-09
HSV颜色空间
HSV(hue,saturation,value)颜色空间的模型对应于圆柱坐标系中的一个圆锥形子集,圆锥的顶面对应于V=1。它包含RGB模型中的R=1,G=1,B=1 三个面,所代表的颜色较亮。色彩H由绕V轴的旋转角给定。红色对应于角度0°,绿色对应于角度120°,蓝色对应于角度240°。在HSV颜色模型中,每一种颜色和它的补色相差180° 。饱和度S取值从0到1,所以圆锥顶面的半径为1。HSV颜色模型所代表的颜色域是CIE色度图的一个子集,这个 模型中饱和度为百分之百的颜色,其纯度一般小于百分之百。在圆锥的顶点(即原点)处,V=0,H和S无定义,代表黑色。圆锥的顶面中心处S=0,V=1,H无定义,代表白色。从该点到原点代表亮度渐暗的灰色,即具有不同 灰度的灰色。对于这些点,S=0,H的值无定义。可以说,HSV模型中的V轴对应于RGB颜色空间中的主对角线。在圆锥顶面的圆周上的颜色,V=1,S=1,这种颜色是纯色。HSV模型对应于画家配色的方法。画家用改变色浓和 色深的方法从某种纯色获得不同色调的颜色,在一种纯色中加入白色以改变色浓,加入黑色以改变色深,同时加入不同比例的白色,黑色即可获得各种不同的色调。
下面是RGB到HSV 转换的vc函数代码:
复制内容到剪贴板
程序代码
程序代码void RGBtoHSV( BYTE r, BYTE g, BYTE b, float &h, float &s, float &v )
{
BYTE min, max;
float delta;
min = MIN( r, g, b );
max = MAX( r, g, b );
v = max; // v
delta = max - min;
if( max != 0 )
{
s = delta / max; // s
}
else
{
// r = g = b = 0 // s = 0, v is undefined
s = 0;
h = -1;
return;
}
if( r == max )
{
h = ( g - b ) / delta; // between yellow & magenta
}
else if( g == max )
{
h = 2 + ( b - r ) / delta; // between cyan & yellow
}
else
{
h = 4 + ( r - g ) / delta; // between magenta & cyan
}
h *= 60; // degrees
if( h < 0 )
{
h += 360;
}
}
评论: 0 | 引用: 0 | 查看次数: -
发表评论
上一篇
下一篇

文章来自:
Tags:
相关日志: