Was ist der Unterschied zwischen colorWithSRGBRed vs colorWithDeviceRed vs colorWithCalibratedRed

8

Es gibt mehrere Methoden der Convenience-Klasse zum Erstellen eines NSColor. Ich kann jedoch nicht erkennen, wann ich die verschiedenen Klassenmethoden verwenden soll:

colorWithSRGBRed:green:blue:alpha: vs colorWithDeviceRed:green:blue:alpha: vs colorWithCalibratedRed:green:blue:alpha:

    
haroldcampbell 24.09.2012, 15:45
quelle

2 Antworten

9

tl; dr Verwenden Sie den kalibrierten Farbraum.

Anstatt die Dokumentation zu erbrechen - die Antwort finden Sie in der Themen zur Farbprogrammierung

Auch die Farbraumübersicht

Bearbeitet zum Hinzufügen

sRGB ist einer der genannten Farbräume.

Schließlich - und dies ist das letzte Bild aus der Dokumentation, und ich hoffe, es beantwortet Ihre Frage - wenn Sie einen Farbraum verwenden möchten, verwenden Sie den kalibrierten.

    
Abizern 24.09.2012, 15:50
quelle
6

Eine Menge von RGB-Werten beschreibt nicht wirklich eine Farbe. Es teilt Ihrem Grafikadapter nur mit, wie viel Prozent des roten, grünen und blauen Lichts Sie in dieser Farbe haben möchten, aber eine Farbe wie 50% reines Rot hat aus zwei Gründen nicht die gleiche Farbe auf allen Monitoren:

  1. 50% ist nicht die gleiche relative Helligkeit auf allen Monitoren wegen der etwas anderen Gamma-Kurven (es ist nicht die gleiche absolute Helligkeit, entweder wegen der unterschiedlichen Helligkeit der Hintergrundbeleuchtung, aber das ist eigentlich irrelevant - nur relative Werte sind wichtig)

  2. Selbst 100% Rot ist nicht der gleiche Rot-Ton wie Monitore unterschiedliche "Schattierungen" von Rot haben, abhängig von ihrer Hintergrundfarbe und ihren Farbfiltern.

Die gleiche RGB-Kombination kann also auf verschiedenen Monitoren anders aussehen. Da es auf Ihrem Monitor eine schöne Orange ist, könnte es auf einigen Monitoren wie ein sehr helles Rot und auf anderen Monitoren wie ein dunkles Gelb aussehen. Es sind überall dieselben RGB-Werte, aber nicht die gleiche Farbe.

Damit RGB eine "Farbe" beschreibt, benötigt es auch einen Farbraum, der einen Raum von Farben definiert, in dem die RGB-Werte wie Koordinaten in diesen Raum sind und somit eine exakte Farbe beschreiben.

( Der ursprüngliche Uploader war Cpesacreta auf Englisch Wikipedia - Übertragen von en.wikipedia auf Commons von aboalbiss. )

Wenn Sie colorWithDeviceRed:green:blue:alpha: verwenden, werden RGB-Werte nicht umgewandelt, sie werden genau so an Ihren Grafikadapter gemeldet. Die Farbe hat also wirklich diese RGB-Werte, aber die Ergebnisse, die der Benutzer auf dem Bildschirm sieht, variieren von Bildschirm zu Bildschirm.

Wenn Sie colorWithSRGBRed:green:blue:alpha: verwenden, werden die RGB-Werte als RGB-Werte des sRGB-Farbraums interpretiert. Das System kennt diesen Raum und weiß somit, welche Farbe hier beschrieben wird. Wenn das System auch den Farbraum Ihres Monitors kennt (z. B. weil es im Werk oder von den Benutzern mit einem Kalibriertool kalibriert wurde), kann es die RGB - Werte vom sRGB - Farbraum in den nativen Farbraum Ihres Monitors umwandeln Monitor. Diese Umwandlung ändert die absoluten RGB-Werte auf ihrem Weg zu Ihrem Monitor. Möglicherweise haben Sie #758299 verwendet und der Monitor zeigt tatsächlich #7483A1 an, aber das liegt daran, dass die Farbe #7483A1 auf dieser Anzeige genau wie die sRGB-Farbe #758299 aussieht, so dass der Benutzer die erwartete korrekte Farbe sieht (auch wenn dies möglich ist) haben nicht dieselben RGB-Werte - aber Benutzer sehen keine RGB-Werte, sie sehen Farben.

sRGB ist ein sehr beliebter Farbraum, er ist der kompatibelste, die meisten grafischen Apps und Systeme wissen darüber und Sie können erwarten, dass jedes moderne Display in der Lage ist, so ziemlich alle vorhandenen sRGB-Farben korrekt anzuzeigen. Aber es ist auch ein sehr begrenzter Farbraum. sRGB ist nur eine Teilmenge aller Farben, die die meisten Geräte ab heute anzeigen können, und es bietet auch nicht 16,7 Millionen verschiedene Farben (obwohl es so viele mögliche RGB-Kombinationen gibt). Deshalb gibt es breitere Farbräume, wie die von Adobe, die Sie in allen Adobe Grafik-Apps finden. Apple bietet einen Farbraum namens "kalibrierter Farbraum" an - manchmal auch "generischer Farbraum" genannt. Sie verwenden es mit colorWithCalibratedRed:green:blue:alpha: und aus dem, was ich in der Dokumentation finden kann, ist dies im Grunde der HSB-Farbraum, der breiter ist als sRGB (intern speichert es Farben in einem anderen Format, aber es gibt eine feste, geräteneutrale Formel zum Konvertieren RBG zu HSB und HSB zurück zu RGB).

Wenn Ihnen also die Farbkorrektheit wichtig ist (der Benutzer muss die gleiche Farbe sehen, die Sie auf Ihrem Bildschirm sehen, unabhängig davon, welche RGB-Werte erforderlich sind), sollten Sie immer Farben in Kombination mit einem Farbraum angeben. Ob Sie sRGB oder Generic / Calibrated verwenden, spielt keine Rolle. Verwenden Sie einfach dasselbe in Ihrer gesamten App.

Wenn Sie ein Werkzeug verwenden, das Farben in sRGB meldet, stimmen die Hexadezimalwerte nur mit diesem Leerzeichen überein. Beachten Sie, dass alle Webstandards implizit sRGB-Farben verwenden. Wenn Sie hexadezimale Farben in HTML- oder CSS-Dateien verwenden, werden diese immer als sRGB-Werte interpretiert. Auch wenn Sie Farben von einer externen Quelle erhalten und diese Quelle Ihnen nicht sagt, zu welchem ​​Farbraum sie gehören, ist es immer am sichersten, sRGB anzunehmen.

Wenn Sie Farben von Ihrem Bildschirm mit dem Farbwähler der Digital Color Meter App (die immer mit MacOS geliefert wird) lesen, achten Sie darauf, Anzeige in generischem RGB zu wählen oder Anzeige in sRGB , aber verwenden Sie nicht native Werte anzeigen , wenn Sie diese Werte in Apps oder auf Websites verwenden möchten. Native Werte sind nur das, was Ihr System wirklich verwendet, um diese Farbe anzuzeigen, aber diese Kombination sieht nur so auf Ihrem System aus.

Natürlich kann nichts davon funktionieren, wenn Ihr Bildschirm nicht korrekt kalibriert ist. Moderne Displays haben ein eingebettetes Kalibrierungsprofil, das Computer herunterladen können, und mobile Geräte haben ihre Kalibrierung ebenfalls auf dem Gerät gespeichert.Wenn Sie einen älteren Monitor haben oder wenn Sie glauben, dass das Profil nicht genau ist (oder wegen der Alterung der Anzeige nicht mehr korrekt!), Müssen Sie Hardware zur Anzeigekalibrierung und ein Tool wie DisplayCAL , um ein besseres Profil zu erstellen (kostenlos, OpenSource, alle wichtigen Plattformen, unterstützt eine breite Palette von USB-Hardware)

Eine häufige Frage ist, was passiert eigentlich, wenn ich RGB-Werte nach dem falschen Farbraum interpretiere? Nun, es wird nicht völlig falsch aussehen. Wenn Sie ein Bild mit einem kleineren Farbraum so anzeigen, als ob es von einem größeren wäre, dann wird das Bild sehr "lebhaft" aussehen (alle Farben haben eine hohe Sättigung, Kontraste werden verstärkt, die Knusprigkeit wird erhöht), wenn es das ist Umgekehrt sieht das Bild eher "stumm" aus (Farben werden viel weniger Sättigung haben, Kontrast wird verringert, Knusprigkeit wird verringert). Siehe dieses Beispiel: Das Bild hat einen normalen Farbraum und wird mit dem richtigen Farbraum auf der rechten Seite angezeigt, auf der linken Seite wird es in einem breiten Farbraum angezeigt, wobei die RGB-Werte des Bildes so behandelt werden, als würden sie zu diesem breiten Farbraum gehören. was sie aber nicht sind, daher die übertriebene Lebendigkeit:

    
Mecki 27.04.2016 11:01
quelle

Tags und Links