/* RGB to HSV 変換関数 おこめ col:24bitGRB ret h:(0,1535) s,v:(0,255) 参考:Oh!FM 1989.9 特集 爆走!! 趣味のC言語ライブラリ Part 6 あれやこれやの MISCライブラリ 歩野零一 */ void RGBtoHSV( int col, int *hh, int *ss, int *vv ) { int r,g,b,rr,gg,bb, x,h,s,v,t ; /* 32k colors */ /* r = (col >> 2) & 0xf8; g = (col >> 7) & 0xf8; b = (col << 3) & 0xf8; */ /* full color */ r = (col >> 8) & 0xff; g = (col >> 16) & 0xff; b = col & 0xff; v = _max( r, g, b ); x = _min( r, g, b ); t = v - x ; if ( v != 0 ) s = t *255 /v ; else s = 0 ; if ( t != 0 ) { rr = ( v - r ) *255 /t ; gg = ( v - g ) *255 /t ; bb = ( v - b ) *255 /t ; } else { rr = gg = bb = 0 ; } if ( r == v ) { if ( b == x ) h = 256 - gg ; else h = 1280 + bb ; } else { if ( g == v ) { if ( b == x ) h = 256 + rr ; else h = 768 - bb ; } else { if ( r == x ) h = 768 + gg ; else h = 1280 - rr ; } } h %= 1536 ; /* h = ( h * 60 ) /256 ; h %= 360 ; */ *hh = h; *ss = s; *vv = v; }