HSV與RGB之間的轉(zhuǎn)換

給定在 HSV 中 (h, s, v) 值定義的一個顏色,帶有如上的 h,和分別表示飽和度和明度的 s 和 v 變化于 0 到 1 之間,在 RGB 空間中相應的 (r, g, b) 三原色能夠計算為:


對于每一個顏色向量 (r, g, b),


對應的,Java實現(xiàn)這種轉(zhuǎn)變的代碼如下:

/*

?* 想構造一系列平滑過渡的顏色,用HSV顏色空間容易,用RGB較難。

?*

?* 將色彩由HSV空間轉(zhuǎn)換到RGB空間

?*

?* h? 顏色? ? ? 用角度表示,范圍:0到360度

?* s? 色度? ? ? 0.0到1.0? 0為白色,越高顏色越“純”

?* v? 亮度? ? ? 0.0到1.0? 0為黑色,越高越亮

?*/

Color HSVtoRGB(float h /* 0~360 degrees */, float s /* 0 ~ 1.0 */, float v /* 0 ~ 1.0 */ )

{

? ? float f, p, q, t;

? ? if( s == 0 ) { // achromatic (grey)

? ? ? ? return makeColor(v,v,v);

? ? }

? ? h /= 60;? ? ? // sector 0 to 5

? ? int i = (int) Math.floor( h );

? ? f = h - i;? ? ? // factorial part of h

? ? p = v * ( 1 - s );

? ? q = v * ( 1 - s * f );

? ? t = v * ( 1 - s * ( 1 - f ) );

? ? switch( i ) {

? ? ? ? case 0:

? ? ? ? ? ? return makeColor(v,t,p);

? ? ? ? case 1:

? ? ? ? ? ? return makeColor(q,v,p);

? ? ? ? case 2:

? ? ? ? ? ? return makeColor(p,v,t);

? ? ? ? case 3:

? ? ? ? ? ? return makeColor(p,q,v);

? ? ? ? case 4:

? ? ? ? ? ? return makeColor(t,p,v);

? ? ? ? default:

? ? ? ? ? ? return makeColor(v,p,q);

? ? }

}

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容