In Quartz 2D wird die CGColorSpaceCreateLab()
Funktion nimmt eine range
Parameter wie folgt definiert:
CGFloat-Bereich[4]: Ein Array mit 4 Zahlen, die den Bereich der gültigen Werte für die a*- und b*-Komponenten des Farbraums angeben. Die a*-Komponente steht für Werte, die von Grün bis Rot reichen, und die b*-Komponente für Werte, die von Blau bis Gelb reichen.
Die Frage ist, was dieser Parameter eigentlich bedeutet do ?
Ich kann mir mindestens drei mögliche Szenarien vorstellen.
Option 1: Vielleicht skaliert es die Komponentenwerte
Angenommen, ich habe zwei Farbräume mit unterschiedlichen Bereichen:
CGFloat range1[] = { -10, 10, -10, 10 };
CGFloat range2[] = { -100, 100, -100, 100 };
CGColorSpaceRef space1 = CGColorSpaceCreateLab(whitePoint, blackPoint, range1);
CGColorSpaceRef space2 = CGColorSpaceCreateLab(whitePoint, blackPoint, range2);
Ich erstelle Farben mit denselben Komponentenwerten und innerhalb des angegebenen Bereichs jedes Raums:
CGFloat components[] = { 50, 10, 10, 1 };
CGColorRef color1 = CGColorCreate(space1, components);
CGColorRef color2 = CGColorCreate(space2, components);
Do color1
y color2
die gleiche Farbe darstellen? Oder ist die range
Parameter die Komponenten in irgendeiner Weise skalieren, so dass diese zwei unterschiedliche Farben haben? (Falls letzteres, welcher Wert für range
entspricht dem Standard CIELAB Koordinatenskalierung?
Option 2: Vielleicht werden die Komponentenwerte geclippt
Angenommen, die beiden oben definierten Räume werden durch die folgenden Farben ersetzt:
CGFloat components[] = { 50, 50, 50, 1 };
CGColorRef color1 = CGColorCreate(space1, components);
CGColorRef color2 = CGColorCreate(space2, components);
Jetzt tun color1
y color2
die gleiche Farbe darstellen? Oder ist die range
Parameter werden die Komponenten von color1
zu { 50, 10, 10, 1 }? (Wenn letzteres, was ist dann der Sinn? Eine extrem grobe Annäherung an eine Gamut-Definition? Um sicherzustellen, dass die Werte innerhalb eines mit einem anderen Datentyp kompatiblen Bereichs bleiben?)
Option 3: Vielleicht wird es anderweitig verwendet, z. B. beim Gamut-Mapping mit einem perzeptiven Rendering Intent
Eine Vorstellung vom zu erwartenden Bereich der L*a*b*-Werte zu haben, könnte bei der Gamut-Zuordnung hilfreich sein, insbesondere im Fall der Wahrnehmung, aber auch hier scheint es sich um eine so grobe Annäherung zu handeln, dass ich nicht sehe, warum sie besonders nützlich sein sollte.
Option 4: Etwas anderes?