Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int color_scheme_converter::rbg2hsv() {
- RGB rgb = {0, 0, 0};
- HSV hsv = { 0.0, 0.0, 0.0 };
- // Eingabe
- cout << "Bitte RGB-Wert (rot) eingeben. Wert zwischen 0 und 255:\n" << endl;
- cin >> rgb.r;
- if (rgb.r > 255 || rgb.r < 0) {
- cout << "Der Wert " << rgb.r << " scheint nicht korrekt zu sein!" << endl;
- return -1;
- }
- cout << "Bitte RGB-Wert (grün) eingeben. Wert zwischen 0 und 255:\n" << endl;
- cin >> rgb.g;
- if (rgb.g > 255 || rgb.g < 0) {
- cout << "Der Wert " << rgb.g << " scheint nicht korrekt zu sein!" << endl;
- return -1;
- }
- cout << "Bitte RGB-Wert (blau) eingeben. Wert zwischen 0 und 255:\n" << endl;
- cin >> rgb.b;
- if (rgb.b > 255 || rgb.b < 0) {
- cout << "Der Wert " << rgb.b << " scheint nicht korrekt zu sein!" << endl;
- return -1;
- }
- float conf_r = rgb.r / 255;
- float conf_g = rgb.g / 255;
- float conf_b = rgb.b / 255;
- // Min und Max
- float rgb_arr[3] = { rgb.r, rgb.g, rgb.b };
- float min = rgb_arr[0], max = rgb_arr[0];
- // Min
- for (int i = 0; i < sizeof(rgb_arr) / sizeof(*rgb_arr); i++)
- {
- if (rgb_arr[i] < min)
- {
- min = rgb_arr[i];
- }
- }
- // Max
- for (int i = 0; i < sizeof(rgb_arr) / sizeof(*rgb_arr); i++){
- if (rgb_arr[i] > max) {
- max = rgb_arr[i];
- }
- }
- cout << "Max: " << max << endl;
- int delta = max - min;
- // H
- if (max == rgb.r) {
- float s1 = (conf_g - conf_b) / delta;
- float s2 = fmod(s1, 6);
- hsv.h = s2 * 60;
- }
- else if (max == rgb.g) {
- float s1 = (conf_b - conf_r) / delta;
- float s2 = s1 + 2;
- hsv.h = s2 * 60;
- }
- else if (max == rgb.b) {
- float s1 = (conf_r - conf_g) / delta;
- cout << s1 << endl;
- float s2 = s1 + 4;
- cout << s2 << endl;
- hsv.h = s2 * 60;
- cout << hsv.h << endl;
- }
- cout << hsv.h << endl;
- // S
- if (max == 0) {
- hsv.s = 0.0;
- }
- else {
- hsv.s = delta / max;
- }
- // V
- hsv.v = max / 255;
- cout << "H: " << hsv.h << "° S: " << hsv.s * 100.0 << " V: " << hsv.v * 100.0 << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement