Advertisement
Guest User

Untitled

a guest
Apr 23rd, 2019
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.95 KB | None | 0 0
  1. int color_scheme_converter::rbg2hsv() {
  2. RGB rgb = {0, 0, 0};
  3. HSV hsv = { 0.0, 0.0, 0.0 };
  4.  
  5. // Eingabe
  6. cout << "Bitte RGB-Wert (rot) eingeben. Wert zwischen 0 und 255:\n" << endl;
  7. cin >> rgb.r;
  8. if (rgb.r > 255 || rgb.r < 0) {
  9. cout << "Der Wert " << rgb.r << " scheint nicht korrekt zu sein!" << endl;
  10. return -1;
  11. }
  12. cout << "Bitte RGB-Wert (grün) eingeben. Wert zwischen 0 und 255:\n" << endl;
  13. cin >> rgb.g;
  14. if (rgb.g > 255 || rgb.g < 0) {
  15. cout << "Der Wert " << rgb.g << " scheint nicht korrekt zu sein!" << endl;
  16. return -1;
  17. }
  18. cout << "Bitte RGB-Wert (blau) eingeben. Wert zwischen 0 und 255:\n" << endl;
  19. cin >> rgb.b;
  20. if (rgb.b > 255 || rgb.b < 0) {
  21. cout << "Der Wert " << rgb.b << " scheint nicht korrekt zu sein!" << endl;
  22. return -1;
  23. }
  24.  
  25. float conf_r = rgb.r / 255;
  26. float conf_g = rgb.g / 255;
  27. float conf_b = rgb.b / 255;
  28.  
  29. // Min und Max
  30. float rgb_arr[3] = { rgb.r, rgb.g, rgb.b };
  31. float min = rgb_arr[0], max = rgb_arr[0];
  32.  
  33. // Min
  34. for (int i = 0; i < sizeof(rgb_arr) / sizeof(*rgb_arr); i++)
  35. {
  36. if (rgb_arr[i] < min)
  37. {
  38. min = rgb_arr[i];
  39. }
  40. }
  41.  
  42. // Max
  43. for (int i = 0; i < sizeof(rgb_arr) / sizeof(*rgb_arr); i++){
  44. if (rgb_arr[i] > max) {
  45. max = rgb_arr[i];
  46. }
  47. }
  48.  
  49. cout << "Max: " << max << endl;
  50.  
  51. int delta = max - min;
  52.  
  53. // H
  54. if (max == rgb.r) {
  55. float s1 = (conf_g - conf_b) / delta;
  56. float s2 = fmod(s1, 6);
  57. hsv.h = s2 * 60;
  58. }
  59. else if (max == rgb.g) {
  60. float s1 = (conf_b - conf_r) / delta;
  61. float s2 = s1 + 2;
  62. hsv.h = s2 * 60;
  63. }
  64. else if (max == rgb.b) {
  65. float s1 = (conf_r - conf_g) / delta;
  66. cout << s1 << endl;
  67. float s2 = s1 + 4;
  68. cout << s2 << endl;
  69. hsv.h = s2 * 60;
  70. cout << hsv.h << endl;
  71. }
  72.  
  73. cout << hsv.h << endl;
  74.  
  75. // S
  76. if (max == 0) {
  77. hsv.s = 0.0;
  78. }
  79. else {
  80. hsv.s = delta / max;
  81. }
  82.  
  83. // V
  84. hsv.v = max / 255;
  85.  
  86. cout << "H: " << hsv.h << "° S: " << hsv.s * 100.0 << " V: " << hsv.v * 100.0 << endl;
  87.  
  88.  
  89. return 0;
  90. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement