2018/11/15

[C#] WPF Convert HSV to RGB Color

在 WPF 裡面要將物件上色,都是用
object.Fill = new SolidColorBrush(Color.FromRgb(R, G, B));
但如果介面想要用 HSV 來當作輸入參數的話,這邊有一個轉換的方法參考
色彩轉換方法 HSV2RGB(h, s, v)
  1. object.Fill = new SolidColorBrush( HSV2RGB(h, s, v) );

輸入HSV參數(0~255)
輸出RGB (byte)給物件填滿色彩
  1. // H:0~255, S:0~255, V:0~255
  2. private Color HSV2RGB(float H, float S, float V)
  3. {
  4. float H_Index = H / 255 * 360;
  5. float S_Index = S / 255;
  6. float V_Index = V / 255;
  7. float C = V_Index * S_Index;
  8. float X = C * (1 - Math.Abs(H_Index / 60 % 2 - 1));
  9. float m = V_Index - C;
  10.  
  11. float R_Index, G_Index, B_Index;
  12.  
  13. if (H_Index >= 0 && H_Index < 60)
  14. {
  15. R_Index = C;
  16. G_Index = X;
  17. B_Index = 0;
  18. }
  19. else if (H_Index >= 60 && H_Index < 120)
  20. {
  21. R_Index = X;
  22. G_Index = C;
  23. B_Index = 0;
  24. }
  25. else if (H_Index >= 120 && H_Index < 180)
  26. {
  27. R_Index = 0;
  28. G_Index = C;
  29. B_Index = X;
  30. }
  31. else if (H_Index >= 180 && H_Index < 240)
  32. {
  33. R_Index = 0;
  34. G_Index = X;
  35. B_Index = C;
  36. }
  37. else if ((H_Index >= 240 && H_Index < 300))
  38. {
  39. R_Index = X;
  40. G_Index = 0;
  41. B_Index = C;
  42. }
  43. else
  44. {
  45. R_Index = C;
  46. G_Index = 0;
  47. B_Index = X;
  48. }
  49. return Color.FromRgb((byte)((R_Index + m) * 255), (byte)((G_Index + m) * 255), (byte)((B_Index + m) * 255));
  50. }


END

沒有留言:

張貼留言