7,763
社区成员
发帖
与我相关
我的任务
分享
RGBType HSV_to_RGB( HSVType HSV )
{
// H is given on [0, 1] or UNDEFINED. S and V are given on [0, 1].
// RGB are each returned on [0, 1].
float h = HSV.h * 6, s = HSV.s, v = HSV.v, m, n, f;
int i;
if (h == 0) h=.01;
if(h == UNDEFINED)
return RGBTypeMake(v, v, v);
i = floorf(h);
f = h - i;
if(!(i & 1)) f = 1 - f; // if i is even
m = v * (1 - s);
n = v * (1 - s * f);
switch (i)
{
case 6:
case 0: return RGBTypeMake(v, n, m);
case 1: return RGBTypeMake(n, v, m);
case 2: return RGBTypeMake(m, v, n);
case 3: return RGBTypeMake(m, n, v);
case 4: return RGBTypeMake(n, m, v);
case 5: return RGBTypeMake(v, m, n);
}
return RGBTypeMake(0, 0, 0);
}