Man kann lange darüber diskutieren, ob sich nun HSB oder HSL besser an das menschliche Verständnis von Farbe anlehnen, allenfalls könnte man ins Feld führen, dass HSL Sättigung und Helligkeit besser trennt.
Anwendungen wie Photoshop und der Farbwähler von Mac OS benutzen HSB, das W3C hat für die Notation von Farben in CSS (Stylesheets) HSL als Option eingeführt.
HSL und HSB (auch HSV genannt) sind nicht-lineare Transformationen des RGB-Farbraums. Die Farbwerte werden nicht über einen Lab-Farbraum umgerechnet.
Für die Transformation von RGB nach HSV bzw. nach HSV und zurück gibt es keine Matrix, aber Algorithmen:
// r,g,b-Werte zwischen 0 und 1 // h = [0,360], s = [0,1], v = [0,1] // Wenn s == 0, dann h = -1 (undefined) void RGBtoHSV( float r, float g, float b, float *h, float *s, float *v) { float min, max, delta; min = MIN( r, g, b ); max = MAX( r, g, b ); *v = max; // v delta = max - min; if( max != 0 ) *s = delta / max; else { // r = g = b = 0 *s = 0; *h = -1; return; } if (max == min) { // hier ist alles Grau *h = 0; *s = 0; return; } if( r == max ) *h = ( g - b ) / delta; // zwischen Gelb und Magenta else if( g == max ) *h = 2 + ( b - r ) / delta; // zwischen Cyan und Gelb else *h = 4 + ( r - g ) / delta; // zwischen Magenta und Zyan *h *= 60; // degrees if( *h < 0 ) *h += 360; } void HSVtoRGB( float *r, float *g, float *b, float h, float s, float v) { int i; float f, p, q, t; if( s == 0 ) { // achromatisch (Grau) *r = *g = *b = v; return; } h /= 60; // sector 0 to 5 i = floor( h ); f = h - i; // factorial part of h p = v * ( 1 - s ); q = v * ( 1 - s * f ); t = v * ( 1 - s * ( 1 - f ) ); switch( i ) { case 0: *r = v; *g = t; *b = p; break; case 1: *r = q; *g = v; *b = p; break; case 2: *r = p; *g = v; *b = t; break; case 3: *r = p; *g = q; *b = v; break; case 4: *r = t; *g = p; *b = v; break; default: // case 5: *r = v; *g = p; *b = q; break; } }
R709 3.2404 –1.5371 –0.4985 X [ G709 ] = [ -0.9692 1.8759 0.0415 ] • [ Y ] B709 0.0556 –0.2040 1.0573 Z
X 0.4124 0.3575 0.1804 R709 [ Y ] = [ 0.2126 0.7151 0.0721 ] • [ G709 ] Z 0.0193 0.1191 0.9502 B709
R709 0.9395 0.0501 0.0102 R240M [ G709 ] = [ 0.0177 0.9657 0.0164 ] • [ R240M ] B709 -0.0016 0.0043 1.0059 R240M
R709 1.0440 –0.0440 0.0 REBU [ G709 ] = [ 0.0 1.0 0.0 ] • [ REBU ] B709 0.0 0.0117 0.9882 REBU