1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
// input H,S,B in [0,1]
// output RGB in [0,0xFFF]
int hsv2rgb(float H, float S,float V) {
float Hf=(H-(int)H)*6;
int Hi= (int)Hf;
float f = Hf-Hi;
float p = V*(1-S);
float q = V*(1-f*S);
float t = V*(1-(1-f)*S);
int R=0,G=0,B=0;
switch(Hi) {
case 0: R=(int)(V*255); G=(int)(t*255); B=(int)(p*255); break;
case 1: R=(int)(q*255); G=(int)(V*255); B=(int)(p*255); break;
case 2: R=(int)(p*255); G=(int)(V*255); B=(int)(t*255); break;
case 3: R=(int)(p*255); G=(int)(q*255); B=(int)(V*255); break;
case 4: R=(int)(t*255); G=(int)(p*255); B=(int)(V*255); break;
case 5: R=(int)(V*255); G=(int)(p*255); B=(int)(q*255); break;
}
return (R<<16)|(G<<8)|B;
} |
Partager