2010-05-11 5 views
6

Mit Snow Leopard wurde das Standardgamma von 1.8 auf 2.2 geändert. Ich arbeite gerade an einigen Mac-Apps, die ein sehr dunkles benutzerdefiniertes Farbschema von Cocoa verwenden. Am 10.5 sieht es gut aus, aber am 10.6 mit dem neuen Gamma ist es viel dunkler und sehr hart für die Augen.NSColor, 10.6 und Gamma 2.2

Das Farbschema wird mit zahlreichen [NSColor colorWithCalibratedRed:green:blue:alpha:] Objekten innerhalb einer Themenklasse definiert.

Gibt es eine Möglichkeit, ein NSColor Objekt zu konvertieren, so dass es auf 10.6 genau wie auf 10.5 angezeigt wird?

Ich weiß, dass dies global aus den Systemeinstellungen erreicht werden kann, aber das ist nicht das, wonach ich bin.

+0

Wie unterscheidet sich dieser API-Aufruf von "[NSColor colorWithDeviceRed: grün: blau: alpha:]"? – fbrereto

+2

Aus der Dokumentation "Im Allgemeinen wird empfohlen, anstelle von Gerätefarbräumen kalibrierte (oder generische) Farbräume zu verwenden. Die Farben in Gerätefarbräumen können von Gerät zu Gerät stark variieren, während kalibrierte Farbräume in der Regel ziemlich genau sind Die Gerätefarbräume hingegen können unter bestimmten Umständen eine bessere Leistung erbringen. Wenn Sie also sicher wissen, welches Gerät die Farbe rendern oder erfassen wird, verwenden Sie stattdessen einen Gerätefarbraum. " –

Antwort

0

Die einzigen wirklichen Probleme ich habe, sind mit dunkelfarbigen Steigungen. 10.4 ist immer noch ein gültiges Ziel, daher habe ich meine eigene Gradient-Wrapper-Klasse, die auf CGShading-Objekten basiert, für einige Zeit verwendet (NSGradient ist nur 10.5+).

Eine einfache nicht-lineare Korrekturkurve basierend auf der folgenden Formel helfen:

colour_component = pow(colour_component, 1.0/1.19); 

Der 1,19-Wert kann eingestellt werden, um verschiedene Korrekturkurven zu erstellen.

Wenn 10.6 zur Laufzeit erkannt wird (mit Gestalt), wird die Kurve auf jede der roten, grünen und blauen Komponenten für Start- und Endfarbe angewendet, bevor der Gradient berechnet wird. Ich habe die Alpha-Werte unberührt gelassen.

Ich fügte auch eine praktische Benutzervorliebe hinzu, um dieses ein- und auszuschalten.

0

Am besten speichern Sie das Farbprofil für das Display, auf dem die Farbe gut aussieht.

Verwenden Sie dann das Farbprofil für die derzeit verwendete Anzeige, um die Farbe zu konvertieren.

Im Grunde, was Sie haben, ist:

(Originalfarbe mit Original-Profil) in (Neuer Farbe mit aktuellem Farbprofil).

Sie werden immer drei der vier Elemente haben - Sie müssen nur die neue Farbe berechnen.

Weitere Informationen, würde ich vorschlagen Lesung:

http://developer.apple.com/mac/library/documentation/cocoa/conceptual/DrawColor/DrawColor.html

+0

Danke, ich brauche Zugang zu den roten, grünen, blauen und alpha Farbkomponenten. Soweit ich sehen kann, nur NSColor Objekte mit colorWithCalibratedRed erstellt: .. und colorWithDeviceRed: .. geben Sie diese Freiheit. –

+0

Eigentlich nein. Einmal, um wirklich in alle Details zu kommen, können Sie tun, was auch immer Sie mögen. Manchmal müssen Sie jedoch feststellen, dass eine RGB-Farbe beispielsweise mehrere CMYK-Farben darstellen kann. – ericg