看板 C_Sharp 關於我們 聯絡資訊
以下是我寫的將rgb轉成hsi的程式 -- double h, s, ii; if (b <= g && Math.Sqrt(Math.Pow((r - g), 2) + (r - b) * (g - b))!=0) { h = Math.Acos((1 / 2) * (r - g + r - b) / Math.Sqrt(Math.Pow((r - g), 2) + (r - b) * (g - b))) * 180 / Math.PI; scbH.Value = (int)h; lblH.Text = "H="+Convert.ToString((int)h); } else if (b > g && Math.Sqrt(Math.Pow((r - g), 2) + (r - b) * (g - b)) != 0) { h =360- Math.Acos(1 / 2 * (r - g + r - b) / Math.Sqrt(Math.Pow((r - g), 2) + (r - b) * (g - b))) * 180 / Math.PI; scbH.Value = (int)h; lblH.Text = "H=" + Convert.ToString((int)h); } if ((r + g + b) > 0) { s = 1 - 3 * Math.Min(Math.Min(r, g), b) / (r + g + b); scbS.Value = (int)(s*100); lblS.Text ="S="+ Convert.ToString((int)(s*100)); } ii = (r+g+b)/3; scbII.Value = (int)ii; lblII.Text = "I="+Convert.ToString((int)ii); -- 但是我測試之後發現到h只會在90,270這兩個數字跑... 不知道是怎麼回事 請大大們幫我一下>"< -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.161.147.101
Marquess:把式子中的(1/2)改為0.5....(1/2)不是double 03/31 23:08
tomex:這樣也看得懂,佩服 04/01 10:54
jason1015:大感謝^^ 04/01 19:16
icools:佩服 +1 XD 04/14 04:01