請問顏色的亮度(light)問題 |
尚未結案
|
iamjsn
初階會員 發表:78 回覆:95 積分:44 註冊:2002-08-16 發送簡訊給我 |
|
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
請參考: http://www.cvl.iis.u-tokyo.ac.jp/~miyazaki/program/tech01.html 其中的 RGB<-->HLS 的轉換.
注意, 其中的 H 就是對話盒中的色調, S 就是濃度, L 就是亮度!! (但他值域是 0~360, 0~1, 0~1, 和對話盒中的值域不同哦~) 在 windows 顏色選擇對話盒中的 HSL 是從 0~240, RGB 是由 0~255, 簡單寫個由 RGB -> HSL 對話盒的參數對應值:
procedure TForm1.Button2Click(Sender: TObject); var R, G, B: Double; H, S, L: Double; mx, mn, cd: Double; begin R:=32; G:=17; B:=85; R:=R/255; G:=G/255; B:=B/255; mx := MaxValue([R, G, B]); mn := MinValue([R, G, B]); cd := mx - mn; L := ( mx + mn ) / 2; if(cd=0) then begin H := 0; S := 0; end else begin if(L<=0.5) then S:=cd/(mx+mn) else S:=cd/(2-(mx+mn)); if(R=mx) then H:=(G-B)/cd else if(G=mx) then H:=2+(B-R)/cd else if(B=mx) then H:=4+(R-G)/cd; end; // if cd = 0 , it means the h may be any of 0~360!! // but windows api color dialog always put the position to 240! // to convert HSL to 0~240 value domain L:=L*240; S:=S*240; H:=H*60; if(H<0) then H:=H+360; H:=H/360*240; ShowMessage(FORMAT('%f, %f, %f',[H, S, L])); end; |
iamjsn
初階會員 發表:78 回覆:95 積分:44 註冊:2002-08-16 發送簡訊給我 |
|
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
HI, 請參考這篇, 弟寫了一個小範例!! http://delphi.ktop.com.tw/topic.php?TOPIC_ID=43797 另外上面所附的參考資料中(http://www.cvl.iis.u-tokyo.ac.jp/~miyazaki/program/tech01.html)的 RGB<-->HLS 轉換公式有一行有誤, 弟還為此找了一些其他的資料驗證, 原內容為: L<=0.5: cmin=L*(1-S), cmax=2*L-cmin
L>0.5: cmax=L*(1-S)+S, cmin=2*L-cmax
R=f(H+120)
G=f(H)
B=f(H-120) f(h)=
h<60: cmin+(cmax-cmin)*h/60
h>=60 && h<180: cmax
h>=180 && h<240: cmin+(cmax-cmin)*(240-h)/60
h>=240: cmin 應該為:
L<=0.5: cmin=L*(1+S), cmax=2*L-cmin
L>0.5: cmax=L*(1-S)+S, cmin=2*L-cmax
R=f(H+120)
G=f(H)
B=f(H-120) f(h)=
h<60: cmin+(cmax-cmin)*h/60
h>=60 && h<180: cmax
h>=180 && h<240: cmin+(cmax-cmin)*(240-h)/60
h>=240: cmin 請特別注意一下哦~~
|
iamjsn
初階會員 發表:78 回覆:95 積分:44 註冊:2002-08-16 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |