RGBHSV色彩空間模式的互相轉換_第1頁
RGBHSV色彩空間模式的互相轉換_第2頁
RGBHSV色彩空間模式的互相轉換_第3頁
RGBHSV色彩空間模式的互相轉換_第4頁
RGBHSV色彩空間模式的互相轉換_第5頁
已閱讀5頁,還剩2頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、RGB、HSV色彩空間模式的互相轉換文章來源:在開發有關bitmap方面的程序時,經常需要將位圖的顏色在RGB和HSV色彩空間之間轉換,前段時間本人研究過,現在整理一下,希望對大家能有所幫助,該顏色轉換由C+實現       在開發有關bitmap方面的程序時,經常需要將位圖的顏色在RGB和HSV色彩空間之間轉換,前段時間本人研究過,現在整理一下,希望對大家能有所幫助,該顏色轉換由C+實現:RGB顏色空間轉換為HSV空間顏色值:void Rgb2Hsv(float R, float G, float B, float& H, float&

2、 S, float&V)     / r,g,b values are from 0 to 1    / h = 0,360, s = 0,1, v = 0,1    / if s = 0, then h = -1 (undefined)    float min, max, delta,tmp;    tmp = min(R, G);    min = min( tmp, B );    tmp = max( R, G);&#

3、160;   max = max(tmp, 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; 

4、    H = UNDEFINEDCOLOR;      return;        if( R = max )        H = ( G - B ) / delta; / between yellow & magenta   else if( G = max )        H = 2 + ( B - R ) / delta; /

5、 between cyan & yellow   else        H = 4 + ( R - G ) / delta; / between magenta & cyan    H *= 60; / degrees    if( H < 0 )       H += 360;HSV顏色空間轉換為RGB空間顏色值:void Hsv2Rgb(float H, float S, float V, float &am

6、p;R, float &G, float &     int i;    float f, p, q, t;    if( S = 0 )         / achromatic (grey)        R = G = B = V;        return;        H /= 60; /

7、 sector 0 to 5    i = 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:         

8、;R = V;        G = t;        B = p;       break;    case 1:       R = q;       G = V;       B = p;       break;    case

9、2:       R = p;       G = V;       B = t;       break;    case 3:       R = p;       G = q;       B = V;       break;   

10、 case 4:       R = t;       G = p;       B = V;       break;    default: / case 5:       R = V;       G = p;       B = q;       br

11、eak;    s=max(r,g,b)-min(r,g,b)/max(r,g,b)b=max(r,g,b)RGB > HSVvar_R = ( R / 255 )                     /RGB values = 0 ÷ 255var_G = ( G / 255 )var_B = ( B / 255 )var_Min = min( var_R, var_G, var_B )   

12、/Min. value of RGBvar_Max = max( var_R, var_G, var_B )    /Max. value of RGBdel_Max = var_Max - var_Min             /Delta RGB value V = var_Maxif ( del_Max = 0 )                    

13、60;/This is a gray, no chroma.   H = 0                                /HSV results = 0 ÷ 1   S = 0else              

14、0;                     /Chromatic data.   S = del_Max / var_Max   del_R = ( ( ( var_Max - var_R ) / 6 ) + ( del_Max / 2 ) ) / del_Max   del_G = ( ( ( var_Max - var_G ) / 6 ) + ( del_Max / 2 ) ) / del_

15、Max   del_B = ( ( ( var_Max - var_B ) / 6 ) + ( del_Max / 2 ) ) / del_Max   if      ( var_R = var_Max ) H = del_B - del_G   else if ( var_G = var_Max ) H = ( 1 / 3 ) + del_R - del_B   else if ( var_B = var_Max ) H = ( 2 / 3 ) + del_G - del_

16、R   if ( H < 0 ) ; H += 1   if ( H > 1 ) ; H -= 1UID386215 帖子13286 精華0 積分76 鉆石30  威望9249  閱讀權限50 注冊時間2005-6-3 查看詳細資料HSV > RGBif ( S = 0 )                     

17、60; /HSV values = 0 ÷ 1   R = V * 255   G = V * 255   B = V * 255else   var_h = H * 6   if ( var_h = 6 ) var_h = 0      /H must be < 1   var_i = int( var_h )           

18、0; /Or . var_i = floor( var_h )   var_1 = V * ( 1 - S )   var_2 = V * ( 1 - S * ( var_h - var_i ) )   var_3 = V * ( 1 - S * ( 1 - ( var_h - var_i ) ) )   if      ( var_i = 0 ) var_r = V      var_g = var_3 ; var_b = var_1

19、    else if ( var_i = 1 ) var_r = var_2 ; var_g = V      var_b = var_1    else if ( var_i = 2 ) var_r = var_1 ; var_g = V      var_b = var_3    else if ( var_i = 3 ) var_r = var_1 ; var_g = var_2 ; var_b = V    

20、0;   else if ( var_i = 4 ) var_r = var_3 ; var_g = var_1 ; var_b = V        else                   var_r = V      var_g = var_1 ; var_b = var_2    R = var_r * 255  &

21、#160;               /RGB results = 0 ÷ 255   G = var_g * 255   B = var_b * 255RGB > HSVH的轉換比較麻煩一點(略)S=最大值(R,G,B)-最小值(R,G,B)/最大值(R,G,B)V=最大值(R,G,B)以上,與BB在2樓的幾乎一樣。V,BB用的是:B。HSV > RGB轉換比較麻煩,需要按語句一步步走。比如:如果S=0時,R = V * 255G

22、 = V * 255B = V * 255后面(略)。Adobe色彩系統RGB和CMYK相互轉換原理       為了說明 adobe 的 RGB 轉換 CMYK 的過程,不得不先涉及到一些色彩轉換程序方面的東西。CMYK_ADOBE_COLORSPACE:r = (k*c)/maxval;g = (k*m)/maxval;b = (k*y)/maxval; 以上是 adobe 的 CMYK 到 RGB轉換公式,下面再來看看 RGB 如何 轉換為 CMYK下面的語句是經過改寫的適用于 Flash 的 actionscript/ RGB to CMY 色彩

23、轉換function rgbtocmy () mycyan = 255 - myred; mymagenta = 255 - mygreen;myyellow = 255 - myblue;correctCMYK(); / CMY to RGB 色彩轉換 function cmytorgb () myred = 255 - mycyan;mygreen = 255 - mymagenta;myblue = 255 - myyellow;correctCMYK(); / CMYK 色彩修正function correctCMYK () if (rep_v != "ERR" v

24、ar temp = Math.min(Math.min(mycyan, mymagenta), myyellow);if (temp != 0) temp2 = Math.round(rep_v / 100) * temp);rep_k = Math.round(temp2 / 255) * 100);rep_c = Math.round(mycyan - temp2) / 255) * 100);rep_m = Math.round(mymagenta - temp2) / 255) * 100);rep_y = Math.round(myyellow - temp2) / 255) * 1

25、00); else rep_c = Math.round(mycyan / 255) * 100);rep_m = Math.round(mymagenta / 255) * 100);rep_y = Math.round(myyellow / 255) * 100);rep_k = 0;       我們知道, RGB 和 CMYK 并不能一一對應,這里面存在的問題是黑色部分的替換值的取值問題。      但是, RGB 所可以全部對應的,是CMY 格式,其最取值范圍是0-255。從色輪上我們可以很容易的了解到這其中的補色計算關系。因此,CMY 和 RGB 的對換 可以說是“無損,可逆轉”的。當從RGB 得到相應的CMY 之后,我們若要得到 CMYK 值,就必須定義一個“黑色替換值”,也就是說提取各色通道中的若干成分來形成黑色通道。CMYK 的取值是 0-100。

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論