English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Dada la gama de colores RGB (en forma de entero); la tarea es encontrar el HSV adecuado para la gama de colores RGB a través de la conversión.
El modelo de color RGB está compuesto por los colores rojo, verde y azul. El modelo RGB es un modelo de color ampliamente utilizado en tecnologías de visualización. Es un modelo acumulativo, donde sumamos estos tres colores de diferentes intensidades para producir millones de colores diferentes en el dispositivo de visualización.
El modelo de color HSV incluye matiz, saturación, valor, también conocido como HSB (matiz, saturación, brillo). HSV es una representación substituta del modelo de color RGB. Se ajusta de acuerdo con las propiedades de percepción visual del color humano. Debido a su paleta de colores natural, este modelo de color se utiliza a menudo por los artistas. Las tres propiedades de HSV se pueden sumar o restar.
Debemos obtener la entrada del usuario en valores del modelo RGB y luego calcular matemáticamente la salida del modelo de color HSV.
Entrada: r = 31, g = 52, b = 29 Salida: h s v = (114.782608, 44.230770, 20.392157) Entrada: r = 129, g = 88, b = 47 Salida: h s v = (30.000000, 63.565895, 50.588238)
La metodología que utilizaremos para resolver el problema dado-
Se ingresa con los colores rojo (r), verde (g) y azul (b) en tres colores.
Dividiremos todos los valores de color por255.
Ahora calculamos cmax, cmin y la diferencia.
Verificar-
Si cmax y cmin son iguales a 0, entonces el matiz o h será 0.
Si cmax es igual a Red(r), entonces el matiz (h) = (60 *((g – b)/ diff)+ 360) %360.
Si cmax es igual a Green(g), entonces el matiz (h) = (60 *((b – r)/ diff)+ 120) %360.
Si cmax es igual a Blue(b), entonces el matiz (h) = (60 *((r – g)/ diff)+ 240) %360.
Para encontrar la saturación, verificaremos-
Si cmax = 0, entonces la saturación (s) = 0.
Si cmax no es cero, entonces, la saturación (s) = (diff / cmax)* 100
Cálculo del valor-
Valor(v) = cmax * 100
Inicio Paso 1 -> En la función float max(float a, float b, float c) Retornar (a > b) ? (a > c ? a : c) : (b > c ? b : c) Paso 2 -> En la función float min(float a, float b, float c) Retornar (a < b) ? (a < c ? a : c) : (b < c ? b : c) Paso 3 -> En la función int rgb_to_hsv(float r, float g, float b) Declarar float h, s, v Establecer r = r / 255.0 Establecer g = g / 255.0 Establecer b = b / 255.0 Establecer cmax = max(r, g, b) Establecer cmin = min(r, g, b) Establecer diff = cmax-cmin Si cmax == cmin entonces, Establecer h = 0 Fin if Else if cmax == r then, Establecer h = fmod((60 * ((g - b) / diff) + 360), 360.0) Fin Else if Else if cmax == g then, Establecer h = fmod((60 * ((b - r) / diff) + 120), 360.0) Fin Else if Else if cmax == b then, Establecer h = fmod((60 * ((r - g) / diff) + 240), 360.0) Fin Else if Si cmax == 0 entonces, Establecer s = 0 Fin if Else Establecer s = (diff / cmax) * 100 Fin Else v = cmax * 100; Imprimir h, s, v Paso 4 -> int main(int argc, char const *argv[]) Declarar e inicializar r = 45, g = 215, b = 0 Llame a la función rgb_to_hsv(r, g, b) Detener
#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) { //Valores de R, G, B divididos por255- //Cambiar el rango de 0..255Cambiar a 0..1: float h, s, v; r /= 255.0; g /= 255.0; b /= 255.0; float cmax = max(r, g, b); // máximo de r, g, b float cmin = min(r, g, b); // mínimo de r, g, b float diff = cmax-cmin; // diferencia de cmax y 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); //Si cmax es cero if (cmax == 0) s = 0; else s = (diff / cmax) * 100; //Calcular v- v = cmax * 100; printf("h s v=(%f, %f, %f)\n", h, s, v ); return 0; } //Función principal int main(int argc, char const *argv[]) { int r = 45, g = 215, b = 0; rgb_to_hsv(r, g, b); return 0; }
Resultado de salida
h s v=(107.441864, 100.000000, 84.313728)