English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Programme C change le modèle de couleur RGB en HSV

Pour une gamme de couleurs RGB donnée (au format entier) ; la tâche consiste à trouver une gamme de couleurs HSV appropriée en convertissant la gamme de couleurs RGB.

Qu'est-ce que le modèle de couleur RGB ?

Le modèle de couleur RGB est composé de trois couleurs : rouge, vert et bleu. Le modèle RGB est un modèle de couleur largement utilisé dans les techniques de visualisation. C'est un modèle cumulatif où nous ajoutons ces trois couleurs de différentes intensités pour produire des millions de couleurs différentes sur les appareils d'affichage.

Qu'est-ce que le modèle de couleur HSV ?

Le modèle de couleur HSV comprend la teinte, la saturation, la valeur, également connu sous le nom de HSB (teinte, saturation, luminosité). Le HSV est une représentation de remplacement du modèle de couleur RGB. Il est ajusté de manière à ce qu'il soit adapté aux perceptions visuelles humaines des propriétés des couleurs. Grâce à son schéma de couleurs naturel, ce modèle de couleur est souvent utilisé par les artistes. Les trois attributs de HSV peuvent être ajoutés ou soustraits.

Ce que nous devons faire dans le programme

Nous devons obtenir les entrées des valeurs RGB du modèle utilisateur, puis les calculer mathématiquement pour obtenir la sortie du modèle de couleur HSV.

示例

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)

Nous utiliserons pour résoudre le problème donné-

  • Entrée en trois couleurs de base : rouge (r), vert (g) et bleu (b).

  • Diviser toutes les valeurs de couleur par255.

  • Maintenant, calculons cmax, cmin et la différence.

  • Vérification-

    • Si cmax et cmin sont égaux à 0, alors la teinte ou h sera 0.

    • Si cmax est égal à Red(r), alors la teinte (h) = (60 *((g – b)/ diff)+ 360) %360.

    • Si cmax est égal à Green(g), alors la teinte (h) = (60 *((b – r)/ diff)+ 120) %360.

    • Si cmax est égal à Blue(b), alors la teinte (h) = (60 *((r – g)/ diff)+ 240) %360.

  • Pour trouver la saturation, nous vérifierons-

    • Si cmax = 0, la saturation (s) = 0.

    • Si cmax n'est pas égal à zéro, alors la saturation (s) = (diff / cmax)* 100

  • Calcul de la valeur-

    • Valeur(v) = cmax * 100

Algorithme

Début
Étape 1 -> Dans la fonction float max(float a, float b, float c)
   Retourner (a > b) ? (a > c ? a : c) : (b > c ? b : c)
Étape 2 -> Dans la fonction float min(float a, float b, float c)
   Retourner (a < b) ? (a < c ? a : c) : (b < c ? b : c)
Étape 3 -> Dans la fonction int rgb_to_hsv(float r, float g, float b)
   Déclarer float h, s, v
      Définir r = r / 255.0
      Définir g = g / 255.0
      Définir b = b / 255.0
      Définir cmax = max(r, g, b)
      Définir cmin = min(r, g, b)
      Définir diff = cmax-cmin
      Si cmax == cmin alors,
         Définir h = 0
      Fin si
      Autrement si cmax == r alors,
         Définir h = fmod((60 * ((g - b) / diff) + 360), 360.0)
      Fin Autrement si
      Autrement si cmax == g alors,
         Définir h = fmod((60 * ((b - r) / diff) + 120), 360.0)
      Fin Autrement si
      Autrement si cmax == b alors,
         Définir h = fmod((60 * ((r - g) / diff) + 240), 360.0)
      Fin Autrement si
         Si cmax == 0 alors,
         Définir s = 0
      Fin si
      Autrement
         Définir s = (diff / cmax) * 100
      Fin Autrement
      v = cmax * 100;
      Imprimer h, s, v
      Étape 4 -> int main(int argc, char const *argv[])
      Déclarer et initialiser r = 45, g = 215, b = 0
      Appeler la fonction 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) {
   //Diviser les valeurs R, G, B par255-
   //Porter la gamme de 0..255Changer en 0..1:
   float h, s, v;
   r /= 255.0;
   g /= 255.0;
   b /= 255.0;
   float cmax = max(r, g, b); // maximum de r, g, b
   float cmin = min(r, g, b); // minimum de r, g, b
   float diff = cmax-cmin; // différence de cmax et 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 est égal à zéro
      if (cmax == 0)
         s = 0;
      else
         s = (diff / cmax) * 100;
   //Calculer v-
   v = cmax * 100;
   printf("h s v=(%f, %f, %f)\n", h, s, v );
   return 0;
}
//Fonction principale
int main(int argc, char const *argv[]) {
   int r = 45, g = 215, b = 0;
   rgb_to_hsv(r, g, b);
   return 0;
}

Résultat de la sortie

h s v=(107.441864, 100.000000, 84.313728)