2010-12-11 16 views
1

eine Frage zu noob hier.RGB zu HSL Umwandlung scheint OK Wert-Vise, aber nicht visuell

  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 mache ich eine RGB zu HSL Umwandlung, die ergibt: H: 0,10, ist S: 0,16 und L: 0,13

  4. so setze ich eine Hintergrundfarbe des gleichen Rechtecks ​​mit:

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

die Sache ist, dass die HSL-Farb nichts wie die RGB-Farbe sieht. Ich habe mein Konvertierungsergebnis mit einem Online-Konverter verglichen und es sieht soweit ich weiß aus.

Ich interpretiere höchstwahrscheinlich etwas falsch.

+0

Zeigen Sie Ihren Code, wo Sie die Hintergrundfarbe festlegen. Sie können auch einen Screenshot hochladen, da dies ein visueller Fehler ist. Sie können das Bild als direkten Upload in Ihre Frage einfügen. –

Antwort

4

Die UIColor-Funktion wendet HSB an, das sich von HSL unterscheidet.

+0

oh drat! sieht aus wie ich HSL vs HSV/HSB gemischt. oh man, Stunden verschwendeten die Konvertierung in das falsche Format. Danke! – TrekOnTV2017

1

Wie Dominik aufgezeigt hat, hast du HSB/HSV und HSL gemischt.

Here you'll find as Category für UIImage für

zu HSB Umwandlung

bearbeiten
Der Link führt nun zu einem GIST I aus diesem Code erstellt. Ich fand es in einem anderen github project.

+0

danke. Ich habe mir das angeschaut, konnte aber nicht herausfinden, wie man die HSB-Werte tatsächlich von einem UIColor bekommt. Ja ich bin ein GROSSER Noob :-). Also habe ich beschlossen, meine eigene Konvertierungsmethode zu schreiben. Was ging OK, außer der HSB - HSL faux pas – TrekOnTV2017

+0

Hat jemand einen nicht toten Link für diesen Code? Die Seite sieht fast so aus, als wäre sie besetzt. – Diziet

+1

gib mir einen Moment. Ich habe einen Kern dieses Codes erstellt – vikingosegundo

0

Hier ist eine Open-Source-Mischung von Drupals Farbfunktionen + einige verschiedene Programmierer arbeiten gemischt in einer einzigen Funktion mit RGB> HSL und zurück. 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); 

?> 
+1

danke, sieht gut aus – TrekOnTV2017