Question

une question noob ici.

  1. Disons que j'ai des valeurs RVB de: R: 53, G: 37 et B: 11
  2. so i définir une couleur d'arrière-plan d'un rectangle avec:

    [UIColor colorWithRed:0.53 green:0.37 blue:0.11 alpha:1.00];

  3. maintenant je fais un RGB à conversion HSL que les rendements: H: 0,10, S est: 0,16 et L: 0,13

  4. so i définir une couleur d'arrière-plan du même rectangle avec:

    [UIColor colorWithHue:0.10 saturation:0.16 brightness:0.13 alpha:1.00];

la chose est que les regards de couleur HSL rien comme la couleur RVB. Je comparais mon résultat de la conversion contre un convertisseur en ligne et il semble OK pour autant que je peux dire.

Je suis très probablement quelque chose interprétait de manière incorrecte.

Était-ce utile?

La solution

La fonction UIColor applique HSB qui est différente de HSL.

Autres conseils

Comme Dominik a, vous mêlé HSB / HSV et HSL.

vous trouverez ici dans la catégorie UIImage pour la conversion à HSB

modifier Le lien dirige maintenant à un point essentiel que j'ai créé à partir de ce code. Je l'ai trouvé dans un autre projet github .

Voici un mélange open source de fonctions de couleurs Drupals + quelques différents programmeurs travaillent mélangés dans une seule fonction vantardise RVB> HSL et le dos. Il fonctionne parfaitement.

<?php
### RGB >> HSL
function _color_rgb2hsl($rgb) {
  $r = $rgb[0]; $g = $rgb[1]; $b = $rgb[2];
  $min = min($r, min($g, $b)); $max = max($r, max($g, $b));
  $delta = $max - $min; $l = ($min + $max) / 2; $s = 0;
  if ($l > 0 && $l < 1) {
    $s = $delta / ($l < 0.5 ? (2 * $l) : (2 - 2 * $l));
  }
  $h = 0;
  if ($delta > 0) {
    if ($max == $r && $max != $g) $h += ($g - $b) / $delta;
    if ($max == $g && $max != $b) $h += (2 + ($b - $r) / $delta);
    if ($max == $b && $max != $r) $h += (4 + ($r - $g) / $delta);
    $h /= 6;
  } return array($h, $s, $l);
}

### HSL >> RGB
function _color_hsl2rgb($hsl) {
  $h = $hsl[0]; $s = $hsl[1]; $l = $hsl[2];
  $m2 = ($l <= 0.5) ? $l * ($s + 1) : $l + $s - $l*$s;
  $m1 = $l * 2 - $m2;
  return array(_color_hue2rgb($m1, $m2, $h + 0.33333),
               _color_hue2rgb($m1, $m2, $h),
               _color_hue2rgb($m1, $m2, $h - 0.33333));
}

### Helper function for _color_hsl2rgb().
function _color_hue2rgb($m1, $m2, $h) {
  $h = ($h < 0) ? $h + 1 : (($h > 1) ? $h - 1 : $h);
  if ($h * 6 < 1) return $m1 + ($m2 - $m1) * $h * 6;
  if ($h * 2 < 1) return $m2;
  if ($h * 3 < 2) return $m1 + ($m2 - $m1) * (0.66666 - $h) * 6;
  return $m1;
}

### Convert a hex color into an RGB triplet.
function _color_unpack($hex, $normalize = false) {
  if (strlen($hex) == 4) {
    $hex = $hex[1] . $hex[1] . $hex[2] . $hex[2] . $hex[3] . $hex[3];
  } $c = hexdec($hex);
  for ($i = 16; $i >= 0; $i -= 8) {
    $out[] = (($c >> $i) & 0xFF) / ($normalize ? 255 : 1);
  } return $out;
}

### Convert an RGB triplet to a hex color.
function _color_pack($rgb, $normalize = false) {
  foreach ($rgb as $k => $v) {
    $out |= (($v * ($normalize ? 255 : 1)) << (16 - $k * 8));
  }return '#'. str_pad(dechex($out), 6, 0, STR_PAD_LEFT);
}

/* $testrgb = array(0.2,0.75,0.4); //RGB to start with
print_r($testrgb); */
      print "Hex: ";

  $testhex = "#b7b700";
      print $testhex;

  $testhex2rgb = _color_unpack($testhex,true); 
      print "<br />RGB: ";

  var_dump($testhex2rgb);
      print "<br />HSL color module: ";

  $testrgb2hsl = _color_rgb2hsl($testhex2rgb); //Converteren naar HSL

  var_dump($testrgb2hsl);
      print "<br />RGB: ";

  $testhsl2rgb = _color_hsl2rgb($testrgb2hsl); // En weer terug naar RGB    
  var_dump($testhsl2rgb); 
      print "<br />Hex: ";

  $testrgb2hex = _color_pack($testhsl2rgb,true);
  var_dump($testrgb2hex);

?>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top