Frage

eine noob Frage hier.

  1. Lassen Sie uns sagen, ich habe RGB-Werte: R: 53, G: 37 und B: 11
  2. , so dass ich eine Hintergrundfarbe eines Rechtecks ??mit:

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

  3. Jetzt habe ich einen RGB zu HSL-Konvertierung, die Ausbeuten: H: 0,10, S: 0,16, und L: 0,13

  4. , so dass ich eine Hintergrundfarbe des gleichen Rechtecks ??mit:

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

Die Sache ist, dass das HSL-Farb Aussehen nichts , wie die RGB-Farbe. Ich vergleichen mein Wandlungsergebnis gegen einen Online-Konverter und es sieht nicht gut aus, soweit ich das beurteilen kann.

Ich bin am wahrscheinlichsten Interpretation falsch etwas.

War es hilfreich?

Lösung

Die UIColor Funktion gilt HSB was HSL unterscheidet.

Andere Tipps

Wie Dominik wies darauf hin, Sie verwechselt HSB / HSV und HSL.

Hier können Sie als Kategorie für UIImage finden für HSB Umwandlung

Bearbeiten
Der Link führt nun zu einem Kern ich von diesem Code erstellt. Ich fand es in einem anderen GitHub Projekt .

Hier ist ein Open-Source-Mischung aus Drupals Farbfunktionen + einige verschiedene Programmierer in einer einzigen Funktion Prahlerei RGB> HSL und wieder gemischt arbeiten. Es funktioniert einwandfrei.

<?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);

?>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top