8 Stimmen

Quartz 2D: CGColorSpaceCreateLab: Zweck des Range-Parameters?

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?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X