ColorsConverter.cs

Description du code

ColorsConverter.cs est un fichier du projet BrolDev.
Ce fichier est situé dans /var/www/bin/sniplets/bibliobrol/broldev/src/.

Projet BrolDev : Librairie de composants réutilisables pour les applications BrolDev en CSharp.

Code source ou contenu du fichier

  1. using System;
  2. using be.gaudry.model.config;
  3.  
  4. namespace be.gaudry.model.drawing.colors.converter
  5. {
  6. /// <summary>
  7. /// Color converter - converts colors from different color spaces
  8. /// </summary>
  9. ///
  10. /// <remarks>The class provides static method, which implement conversation
  11. /// between <b>RGB</b> and other color palettes.</remarks>
  12. ///
  13. public sealed class ColorsConverter
  14. {
  15.  
  16. static bool src = SourcesManager.addSource(new Source(
  17. "AForge.NET",
  18. "ColorsConverter",
  19. "http://aforge.googlecode.com/svn/trunk/Sources/",
  20. "Framework de traitement d'images"
  21. )
  22. );
  23. // Avoid class instantiation
  24. private ColorsConverter() { }
  25.  
  26. /// <summary>
  27. /// Convert from RGB to HSL color space
  28. /// </summary>
  29. /// <param name="rgb">Source color in <b>RGB</b> color space</param>
  30. /// <param name="hsl">Destination color in <b>HSL</b> color space</param>
  31. public static void RGB2HSL(RGB rgb, HSL hsl)
  32. {
  33. double r = (rgb.Red / 255.0);
  34. double g = (rgb.Green / 255.0);
  35. double b = (rgb.Blue / 255.0);
  36.  
  37. double min = Math.Min(Math.Min(r, g), b);
  38. double max = Math.Max(Math.Max(r, g), b);
  39. double delta = max - min;
  40.  
  41. // get luminance value
  42. hsl.Luminance = (float)((max + min) / 2);
  43.  
  44. if (delta == 0)
  45. {
  46. // gray color
  47. hsl.Hue = 0;
  48. hsl.Saturation = 0.0F;
  49. }
  50. else
  51. {
  52. // get saturation value
  53. hsl.Saturation = (hsl.Luminance < 0.5) ? (float)(delta / (max + min)) : (float)(delta / (2 - max - min));
  54.  
  55. // get hue value
  56. double del_r = (((max - r) / 6) + (delta / 2)) / delta;
  57. double del_g = (((max - g) / 6) + (delta / 2)) / delta;
  58. double del_b = (((max - b) / 6) + (delta / 2)) / delta;
  59. double hue;
  60.  
  61. if (r == max)
  62. hue = del_b - del_g;
  63. else if (g == max)
  64. hue = (1.0 / 3) + del_r - del_b;
  65. else
  66. hue = (2.0 / 3) + del_g - del_r;
  67.  
  68. // correct hue if needed
  69. if (hue < 0)
  70. hue += 1;
  71. if (hue > 1)
  72. hue -= 1;
  73.  
  74. hsl.Hue = (int)(hue * 360);
  75. }
  76. }
  77. /// <summary>
  78. /// Convert from RGB to HSL color space
  79. /// </summary>
  80. /// <param name="rgb">Source color in <b>RGB</b> color space</param>
  81. public static HSL RGB2HSL(RGB rgb)
  82. {
  83. HSL hsl = new HSL();
  84. RGB2HSL(rgb, hsl);
  85. return hsl;
  86. }
  87.  
  88. /// <summary>
  89. /// Convert from HSL to RGB color space
  90. /// </summary>
  91. /// <param name="hsl">Source color in <b>HSL</b> color space</param>
  92. /// <param name="rgb">Destination color in <b>RGB</b> color space</param>
  93. public static void HSL2RGB(HSL hsl, RGB rgb)
  94. {
  95. if (hsl.Saturation == 0)
  96. {
  97. // gray values
  98. rgb.Red = rgb.Green = rgb.Blue = (byte)(hsl.Luminance * 255);
  99. }
  100. else
  101. {
  102. double v1, v2;
  103. double hue = (double)hsl.Hue / 360;
  104.  
  105. v2 = (hsl.Luminance < 0.5) ?
  106. (hsl.Luminance * (1 + hsl.Saturation)) :
  107. ((hsl.Luminance + hsl.Saturation) - (hsl.Luminance * hsl.Saturation));
  108. v1 = 2 * hsl.Luminance - v2;
  109.  
  110. rgb.Red = (byte)(255 * Hue_2_RGB(v1, v2, hue + (1.0 / 3)));
  111. rgb.Green = (byte)(255 * Hue_2_RGB(v1, v2, hue));
  112. rgb.Blue = (byte)(255 * Hue_2_RGB(v1, v2, hue - (1.0 / 3)));
  113. }
  114. }
  115. /// <summary>
  116. /// Convert from HSL to RGB color space
  117. /// </summary>
  118. /// <param name="hsl">Source color in <b>HSL</b> color space</param>
  119. ///
  120. public static RGB HSL2RGB(HSL hsl)
  121. {
  122. RGB rgb = new RGB();
  123. HSL2RGB(hsl, rgb);
  124. return rgb;
  125. }
  126.  
  127. /// <summary>
  128. /// Convert from RGB to YCbCr color space (Rec 601-1 specification)
  129. /// </summary>
  130. ///
  131. /// <param name="rgb">Source color in <b>RGB</b> color space</param>
  132. /// <param name="ycbcr">Destination color in <b>YCbCr</b> color space</param>
  133. ///
  134. public static void RGB2YCbCr(RGB rgb, YCbCr ycbcr)
  135. {
  136. double r = (double)rgb.Red / 255;
  137. double g = (double)rgb.Green / 255;
  138. double b = (double)rgb.Blue / 255;
  139.  
  140. ycbcr.Y = 0.2989 * r + 0.5866 * g + 0.1145 * b;
  141. ycbcr.Cb = -0.1687 * r - 0.3313 * g + 0.5000 * b;
  142. ycbcr.Cr = 0.5000 * r - 0.4184 * g - 0.0816 * b;
  143. }
  144. /// <summary>
  145. /// Convert from RGB to YCbCr color space (Rec 601-1 specification)
  146. /// </summary>
  147. ///
  148. /// <param name="rgb">Source color in <b>RGB</b> color space</param>
  149. ///
  150. public static YCbCr RGB2YCbCr(RGB rgb)
  151. {
  152. YCbCr ycbcr = new YCbCr();
  153. RGB2YCbCr(rgb, ycbcr);
  154. return ycbcr;
  155. }
  156.  
  157. /// <summary>
  158. /// Convert from YCbCr to RGB color space
  159. /// </summary>
  160. ///
  161. /// <param name="ycbcr">Source color in <b>YCbCr</b> color space</param>
  162. /// <param name="rgb">Destination color in <b>RGB</b> color spacs</param>
  163. ///
  164. public static void YCbCr2RGB(YCbCr ycbcr, RGB rgb)
  165. {
  166. // don't warry about zeros. compiler will remove them
  167. double r = Math.Max(0.0, Math.Min(1.0, ycbcr.Y + 0.0000 * ycbcr.Cb + 1.4022 * ycbcr.Cr));
  168. double g = Math.Max(0.0, Math.Min(1.0, ycbcr.Y - 0.3456 * ycbcr.Cb - 0.7145 * ycbcr.Cr));
  169. double b = Math.Max(0.0, Math.Min(1.0, ycbcr.Y + 1.7710 * ycbcr.Cb + 0.0000 * ycbcr.Cr));
  170.  
  171. rgb.Red = (byte)(r * 255);
  172. rgb.Green = (byte)(g * 255);
  173. rgb.Blue = (byte)(b * 255);
  174. }
  175. /// <summary>
  176. /// Convert from YCbCr to RGB color space
  177. /// </summary>
  178. ///
  179. /// <param name="ycbcr">Source color in <b>YCbCr</b> color space</param>
  180. ///
  181. public static RGB YCbCr2RGB(YCbCr ycbcr)
  182. {
  183. RGB rgb = new RGB();
  184. YCbCr2RGB(ycbcr, rgb);
  185. return rgb;
  186. }
  187.  
  188. #region Private members
  189. // HSL to RGB helper routine
  190. private static double Hue_2_RGB(double v1, double v2, double vH)
  191. {
  192. if (vH < 0)
  193. vH += 1;
  194. if (vH > 1)
  195. vH -= 1;
  196. if ((6 * vH) < 1)
  197. return (v1 + (v2 - v1) * 6 * vH);
  198. if ((2 * vH) < 1)
  199. return v2;
  200. if ((3 * vH) < 2)
  201. return (v1 + (v2 - v1) * ((2.0 / 3) - vH) * 6);
  202. return v1;
  203. }
  204. #endregion
  205. }
  206. }

Structure et Fichiers du projet

Afficher/masquer...


Répertoires contenus dans /var/www/bin/sniplets/bibliobrol/broldev/src/model/drawing/colors/converter/ 
IcôneNomTailleModification
Pas de sous-répertoires.
IcôneNomTailleModification
| _ Répertoire parent0 octets1716976774 29/05/2024 11:59:34
Fichiers contenus dans /var/www/bin/sniplets/bibliobrol/broldev/src/model/drawing/colors/converter/ 
IcôneNomTailleModificationAction
IcôneNomTailleModificationAction
Afficher le fichier .cs|.csRGB.cs2.19 Ko31/10/2018 18:33:24-refusé-
Afficher le fichier .cs|.csColorsConverter.cs7.21 Ko31/10/2018 18:33:24-refusé-
Afficher le fichier .cs|.csHSL.cs3.08 Ko31/10/2018 18:33:24-refusé-
Afficher le fichier .cs|.csYCbCr.cs1.89 Ko31/10/2018 18:33:24-refusé-

Utilisation de l'explorateur de code

  • Navigation :
    • Un clic sur une icône de répertoire ouvre ce répertoire pour en afficher les fichiers.
    • Lorsque le répertoire en cours ne contient pas de sous-répertoires il est possible de remonter vers le répertoire parent.
    • La structure de répertoires en treetable (tableau en forme d'arborescence) n'est plus possibledans cette version.
    • Un clic sur une icône de fichier ouvre ce fichier pour en afficher le code avec la coloration syntaxique adaptée en fonction du langage principal utilisé dans le fichier.
  • Affichage :
    • Il est possible de trier les répertoires ou les fichiers selon certains critères (nom, taille, date).
  • Actions :
    • Les actions possible sur les fichiers dépendent de vos droits d'utilisateur sur le site. Veuillez activer le mode utilisateur pour activer les actions.

Document créé le 16/10/2009, dernière modification le 26/10/2018
Source du document imprimé : https://www.gaudry.be/cs-broldev-source-rf-model/drawing/colors/converter/ColorsConverter.cs.html

L'infobrol est un site personnel dont le contenu n'engage que moi. Le texte est mis à disposition sous licence CreativeCommons(BY-NC-SA). Plus d'info sur les conditions d'utilisation et sur l'auteur.