Guest User

Untitled

a guest
Apr 16th, 2018
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. package local.flpaint.colors {
  2.    
  3.     import local.flpaint.colors.RGB;
  4.     import local.flpaint.colors.HSB;
  5.    
  6.     public class Convert {
  7.        
  8.         public function Convert() {} // Classe statique
  9.        
  10.         public static function rgbToHex (rgbObject:RGB):uint {
  11.             // Raccourcis, séparation des couleurs de l'objet
  12.             var red:uint = rgbObject.redValue,
  13.             green:uint = rgbObject.greenValue,
  14.             blue:uint = rgbObject.blueValue;
  15.            
  16.             // S'assure que les arguments restent dans le bon interval
  17.             red = Math.max(0, Math.min(255, red));
  18.             green = Math.max(0, Math.min(255, green));
  19.             blue = Math.max(0, Math.min(255, blue));
  20.            
  21.             return (red << 16) | (green << 8) | blue;
  22.         }
  23.        
  24.         public static function hexToRgb (hexValue:uint):RGB {
  25.             // S'assure que l'argument reste dans le bon interval
  26.             hexValue = Math.max(0x000000, Math.min(0xFFFFFF, hexValue));
  27.            
  28.             // Créé un nouvel objet RGB à partir de la valeur hexadécimale
  29.             return new RGB((hexValue >> 16) & 0xFF, (hexValue >> 8) & 0xFF, hexValue & 0x0000FF);
  30.         }
  31.        
  32.         public static function hsbToRgb (hsbObject:HSB):RGB {
  33.             // Raccourcis, permet de pouvoir manipuler les valeurs en tant que Numbers pour les calculs
  34.             var h:Number = hsbObject.hueValue, s:Number = hsbObject.saturationValue, v:Number = hsbObject.brightnessValue;
  35.            
  36.             // Variables utilisées afin d'assigner les nouvelles valeurs RGB
  37.             var i:Number, f:Number, p:Number, q:Number, t:Number;
  38.            
  39.             // Variables contenant les valeurs finales RGB
  40.             var r:Number, g:Number, b:Number;
  41.            
  42.             // S'assure que les arguments restent dans le bon interval
  43.             h = Math.max(0, Math.min(360, h));
  44.             s = Math.max(0, Math.min(100, s));
  45.             v = Math.max(0, Math.min(100, v));
  46.            
  47.             // La saturation et la luminosité doivent être un pourcentage exprimé entre 0 et 1 pour les calculs
  48.             s = s / 100;
  49.             v = v / 100;
  50.            
  51.             if (s == 0) {
  52.                 // Si la saturation est égale à 0, la couleur sera grise
  53.                 r = g = b = v;
  54.             } else {
  55.                 h /= 60; // Définit les secteurs 0 à 5
  56.                 i = Math.floor(h);
  57.                 f = h - i; //
  58.                 p = v * (1 - s);
  59.                 q = v * (1 - s * f);
  60.                 t = v * (1 - s * (1 - f));
  61.                
  62.                 // Définit les nouvelles valeurs de RGB selon le secteur de la couleur
  63.                 switch (i) {
  64.                     case 0:
  65.                         r = v;
  66.                         g = t;
  67.                         b = p;
  68.                         break;
  69.                     case 1:
  70.                         r = q;
  71.                         g = v;
  72.                         b = p;
  73.                         break;
  74.                     case 2:
  75.                         r = p;
  76.                         g = v;
  77.                         b = t;
  78.                         break;
  79.                     case 3:
  80.                         r = p;
  81.                         g = q;
  82.                         b = v;
  83.                         break;
  84.                     case 4:
  85.                         r = t;
  86.                         g = p;
  87.                         b = v;
  88.                         break;
  89.                     default: // case 5
  90.                         r = v;
  91.                         g = p;
  92.                         b = q;
  93.                 }
  94.             }
  95.            
  96.             return new RGB(Math.round(r * 255), Math.round(g * 255), Math.round(b * 255));
  97.         }
  98.        
  99.         public static function rgbToHsb (rgbObject:RGB):HSB {
  100.             // Raccourcis, permet de pouvoir manipuler les valeurs en tant que Numbers pour les calculs
  101.             var r:Number = rgbObject.redValue, g:Number = rgbObject.greenValue, b:Number = rgbObject.blueValue;
  102.            
  103.             // Variables contenant les valeurs finales HSB
  104.             var h:Number, s:Number, v:Number;
  105.            
  106.             // Variables de travail (servent à calculer les nouvelles valeurs HSB)
  107.             var max:Number, min:Number, delta:Number;
  108.            
  109.             // Passage à une valeur entre 0 et 1
  110.             r /= 255;
  111.             g /= 255;
  112.             b /= 255;
  113.            
  114.             // Calcul du maximum et du minimum parmis les valeurs RGB
  115.             max = Math.max(r, g, b);
  116.             min = Math.min(r, g, b);
  117.             h = s = v = max;
  118.             delta = max - min;
  119.             s = (max == 0) ? 0 : delta/max; // Valeur de la saturation
  120.            
  121.             if (max == min) { // La couleur est grise
  122.                 h = 0;
  123.             } else {
  124.                 switch (max) {
  125.                     case r:
  126.                         h = (g - b) / delta + ((g < b) ? 6 : 0);
  127.                         break;
  128.                     case g:
  129.                         h = (b - r) / delta + 2;
  130.                         break;
  131.                     case b:
  132.                         h = (r - g) / delta + 4;
  133.                         break;
  134.                 }
  135.                 h /= 6 ; // 6 secteurs de couleur
  136.             }
  137.            
  138.             return new HSB(Math.round(h * 360), Math.round(s * 100), Math.round(v * 100));
  139.         }
  140.        
  141.         public static function hexToHsb (hexCode:uint):HSB {
  142.             // Méthode raccourci pour effectuer une conversion
  143.             return Convert.rgbToHsb(Convert.hexToRgb(hexCode));
  144.         }
  145.        
  146.         public static function hsbToHex (hsbObject:HSB):uint {
  147.             // Méthode raccourci pour effectuer une conversion
  148.             return Convert.rgbToHex(Convert.hsbToRgb(hsbObject));
  149.         }
  150.        
  151.         public static function rgbToMatrix (rgb:RGB, alpha:Number=1):ColorMatrix {
  152.             // Vérifie que l'interval du paramètre est entre 0 et 1
  153.             alpha = Math.max(0, Math.min(1, alpha));
  154.            
  155.             // Créé une matrice de couleur à partir des valeurs RGB
  156.             return new ColorMatrix(new Array( rgb.redValue/255, 0, 0, 0, 0,
  157.                                               0, rgb.greenValue/255, 0, 0, 0,
  158.                                               0, 0, rgb.blueValue/255, 0, 0,
  159.                                               0, 0, 0, alpha, 0 ));
  160.         }
  161.        
  162.         public static function hexToMatrix (hexCode:uint, alpha:Number=1):ColorMatrix {
  163.             // Vérifie que l'interval du paramètre est entre 0 et 1
  164.             alpha = Math.max(0, Math.min(1, alpha));
  165.            
  166.             var rgb:RGB = Convert.hexToRgb(hexCode);
  167.             return Convert.rgbToMatrix(rgb, alpha);
  168.         }
  169.        
  170.         public static function hsbToMatrix (hsb:HSB, alpha:Number=1):ColorMatrix {
  171.             // Vérifie que l'interval du paramètre est entre 0 et 1
  172.             alpha = Math.max(0, Math.min(1, alpha));
  173.            
  174.             var rgb:RGB = Convert.hsbToRgb(hsb);
  175.             return Convert.rgbToMatrix(rgb, alpha);
  176.         }
  177.        
  178.     }
  179.    
  180. }
Add Comment
Please, Sign In to add comment