English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Der gegebene RGB-Farbraum (in Integerform); die Aufgabe ist es, durch Konvertierung des RGB-Farbraums einen geeigneten HSV-Farbton zu finden
Das RGB-Farbraummodell besteht aus den Farben Rot, Grün und Blau. Das RGB-Modell ist ein weit verbreitetes Farbmodell in der Displaytechnologie. Es ist ein Additionsmodell, bei dem wir diese drei Farben mit verschiedenen Intensitäten addieren, um auf Displaygeräten Millionen verschiedener Farben zu erzeugen.
Das HSV-Farbraummodell umfasst Farbton, Sättigung, Wert und wird auch als HSB (Farbton, Sättigung, Helligkeit) bezeichnet. HSV ist eine Alternative Darstellung des RGB-Farbraummodells. Es wird so angepasst, dass es dem menschlichen Farbempfinden entspricht. Aufgrund seiner natürlichen Farbkombination wird dieses Farbmodell oft von Künstlern verwendet. Die drei Eigenschaften von HSV können addiert oder subtrahiert werden.
Wir müssen die Eingaben des Benutzers für die RGB-Modellwerte erhalten und dann mathematisch die Ausgabe im HSV-Farbraum berechnen.
Input: r = 31, g = 52, b = 29 Output: h s v = (114.782608, 44.230770, 20.392157) Input: r = 129, g = 88, b = 47 Output: h s v = (30.000000, 63.565895, 50.588238)
Wir werden das Verfahren verwenden, um das gegebene Problem zu lösen-
Mit den Farben Rot (r), Grün (g) und Blau (b) wird als Eingabe gegeben.
Dividieren wir alle Farbwerte durch255.
Jetzt berechnen wir cmax, cmin und den Unterschied.
Überprüfen-
Wenn cmax und cmin gleich 0 sind, beträgt der Farbton oder h 0.
Wenn cmax gleich Red(r) ist, beträgt der Farbton (h) = (60 *((g – b)/ diff)+ 360) %360.
Wenn cmax gleich Green(g) ist, beträgt der Farbton (h) = (60 *((b – r)/ diff)+ 120) %360.
Wenn cmax gleich Blue(b) ist, beträgt der Farbton (h) = (60 *((r – g)/ diff)+ 240) %360.
Um die Sättigung zu finden, werden wir überprüfen-
Wenn cmax = 0, beträgt die Sättigung (s) 0.
Wenn cmax ungleich Null ist, dann ist der Sättigkeitsgrad (s) = (diff / cmax)* 100
Wertsberechnung-
Wert(v) = cmax * 100
Start Schritt 1 -> In der Funktion float max(float a, float b, float c) Rückgabe (a > b) ? (a > c ? a : c) : (b > c ? b : c) Schritt 2 -> In der Funktion float min(float a, float b, float c) Rückgabe (a < b) ? (a < c ? a : c) : (b < c ? b : c) Schritt 3 -> In der Funktion int rgb_to_hsv(float r, float g, float b) Erklärung von float h, s, v Setze r = r / 255.0 Setze g = g / 255.0 Setze b = b / 255.0 Setze cmax = max(r, g, b) Setze cmin = min(r, g, b) Setze diff = cmax-cmin Wenn cmax == cmin dann, Setze h = 0 Ende Wenn Weniger Wenn cmax == r dann, Setze h = fmod((60 * ((g - b) / diff) + 360), 360.0) Ende Wenn nicht Wenn Weniger Wenn cmax == g dann, Setze h = fmod((60 * ((b - r) / diff) + 120), 360.0) Ende Wenn nicht Wenn Weniger Wenn cmax == b dann, Setze h = fmod((60 * ((r - g) / diff) + 240), 360.0) Ende Wenn nicht Wenn Wenn cmax == 0 dann, Setze s = 0 Ende Wenn Weniger Setze s = (diff / cmax) * 100 Ende Wenn nicht v = cmax * 100; Drucke h, s, v aus Schritt 4 -> int main(int argc, char const *argv[]) Erklärung und Initialisierung von r = 45, g = 215, b = 0 Aufruf der Funktion rgb_to_hsv(r, g, b) Stop
#include <stdio.h> #include <math.h> float max(float a, float b, float c) { return ((a > b) ? (a > c ? a : c) : (b > c ? b : c)); } float min(float a, float b, float c) { return ((a < b)? (a < c ? a : c) : (b < c ? b : c)); } int rgb_to_hsv(float r, float g, float b) { //R,G,B-Werte durch255- //den Bereich von 0..255in 0..1: float h, s, v; r /= 255.0; g /= 255.0; b /= 255.0; float cmax = max(r, g, b); // Maximum von r, g, b float cmin = min(r, g, b); // Minimum von r, g, b float diff = cmax-cmin; // Differenz von cmax und cmin. if (cmax == cmin) h = 0; else if (cmax == r) h = fmod((60 * ((g - b) / diff) + 360), 360.0); else if (cmax == g) h = fmod((60 * ((b - r) / diff) + 120), 360.0); else if (cmax == b) h = fmod((60 * ((r - g) / diff) + 240), 360.0); //wenn cmax gleich null if (cmax == 0) s = 0; else s = (diff / cmax) * 100; //berechnen v- v = cmax * 100; printf("h s v=(%f, %f, %f)\n", h, s, v ); return 0; } //Hauptfunktion int main(int argc, char const *argv[]) { int r = 45, g = 215, b = 0; rgb_to_hsv(r, g, b); return 0; }
Ausgabewert
h s v=(107.441864, 100.000000, 84.313728)