2012-09-24 11 views

Odpowiedz

9

tl; dr Użyj skalibrowana przestrzeń kolorów.

Zamiast regurgitate dokumentację - odpowiedź jest w Color Programming Topics

również Color Space Overview

enter image description here

edytowane dodać

sRGB jest jednym z wymienionych przestrzeni kolorów.

enter image description here

Wreszcie - i to jest ostatni obraz z dokumentacji, i mam nadzieję, że odpowiedzi na swoje pytanie - jeśli chcesz korzystać z przestrzeni kolorów, użyj jednego skalibrowany.

enter image description here

+0

Ok, że luźno odpowiada to dla 'colorWithCalibratedRed' i' colorWithDeviceRed', ale co z 'colorWithSRGBRed'? – haroldcampbell

+0

dzięki @abizern – haroldcampbell

6

Zestaw wartości RGB nie naprawdę opisać kolor. To tylko opowiada swoją kartę graficzną, ile procent z czerwonym, zielonym i niebieskim światłem chcesz w tym kolorze, ale kolor jak 50% czystej czerwieni nie jest tego samego koloru na wszystkich monitorach z dwóch powodów:

  1. 50 % nie jest taka sama względna jasność na wszystkich monitorach z powodu nieznacznie różnych krzywych gamma (to nie to samo absolutna jasność albo z powodu różnej jasności podświetlenia, ale to właściwie bez znaczenia - tylko wartości względne są ważne)

  2. Nawet 100 % czerwony nie jest tym samym odcieniem czerwonym, ponieważ monitory mają różne "odcienie" czerwieni, w zależności od koloru podświetlenia i koloru filtra ers.

Taka sama kombinacja RGB może wyglądać inaczej na różnych monitorach. Będąc ładnym kolorem pomarańczowym na monitorze, może wyglądać jak bardzo jasno czerwony na niektórych i jak ciemnożółty na innych monitorach. Te same wartości RGB są wszędzie, ale nie w tym samym kolorze.

Aby RGB opisał "kolor", potrzebuje również przestrzeni kolorów, która definiuje przestrzeń kolorów, w której wartości RGB są współrzędnymi w tej przestrzeni, a tym samym opisują dokładny kolor.

enter image description here (Oryginalny uploader został Cpesacreta w angielskiej Wikipedii. - Przeniesienie z en.wikipedia do Gmin przez aboalbiss)

Jeśli używasz colorWithDeviceRed:green:blue:alpha: wartości RGB nie są przekształcane są one zgłaszane dokładnie tak do karty graficznej. W związku z tym kolory będą miały te wartości RGB, ale wyniki, które użytkownik zobaczy na ekranie będą się różnić w zależności od ekranu.

Jeśli używasz colorWithSRGBRed:green:blue:alpha:, wartości RGB są interpretowane jako wartości RGB przestrzeni kolorów sRGB. System zna tę przestrzeń i dlatego wie, jaki kolor jest tutaj opisany. Jeśli system zna także przestrzeń kolorów monitora (np. Ponieważ został skalibrowany fabrycznie lub przez użytkowników za pomocą narzędzia do kalibracji), może przekształcić wartości RGB z przestrzeni kolorów sRGB na natywną przestrzeń kolorów twojego monitor. Ta transformacja zmieni bezwzględne wartości RGB w drodze do monitora. Być może użyłeś #758299, a monitor wyświetli teraz #7483A1, ale to dlatego, że kolor #7483A1 wygląda dokładnie tak, jak kolor sRGB #758299 na tym ekranie, więc użytkownik widzi oczekiwany prawidłowy kolor (nawet jeśli nie ma tych samych wartości RGB - ale użytkownicy nie widzą wartości RGB, widzą kolory).

sRGB jest bardzo popularną przestrzenią kolorów, jest najbardziej zgodną, ​​większość aplikacji graficznych i systemu wie o niej i można się spodziewać, że każdy nowoczesny wyświetlacz będzie w stanie prawidłowo wyświetlać prawie wszystkie istniejące kolory sRGB. Ale jest to również bardzo ograniczona przestrzeń kolorów. sRGB jest tylko podzbiorem wszystkich kolorów, które większość urządzeń może wyświetlać na dzień dzisiejszy, a także nie oferuje 16,7 miliona różnych kolorów (nawet jeśli istnieje wiele możliwych kombinacji RGB). Dlatego istnieją szersze przestrzenie kolorów, takie jak te z Adobe, które można znaleźć we wszystkich aplikacjach graficznych Adobe. Firma Apple oferuje przestrzeń kolorów o nazwie "skalibrowana przestrzeń kolorów" - czasami nazywana również "ogólną przestrzenią kolorów". Używasz go z colorWithCalibratedRed:green:blue:alpha: iz tego, co mogę znaleźć w dokumentacji, jest to w zasadzie przestrzeń kolorów HSB, która jest szersza niż sRGB (wewnętrznie przechowuje kolory w innym formacie, ale istnieje stała, neutralna dla urządzenia formuła do konwersji RBG na HSB i HSB z powrotem do RGB).

Jeśli więc ważna jest poprawność kolorów (użytkownik powinien zobaczyć ten sam kolor, który widzisz na ekranie, niezależnie od tego, jakie wartości RGB są wymagane, aby to osiągnąć), należy zawsze określać kolory w połączeniu z przestrzenią kolorów. Niezależnie od tego, czy używasz sRGB, czy Generic/Calibrated, nie używaj tego samego w całej aplikacji.

Jeśli używasz narzędzia, które zgłasza kolory w sRGB, wartości szesnastkowe pasują tylko do tego spacji. Zwróć uwagę, że wszystkie standardy sieciowe używają niejawnie kolorów sRGB. Więc kiedy używasz kolorów szesnastkowych w plikach HTML lub CSS, są one zawsze interpretowane jako wartości sRGB. Także gdy otrzymujesz kolory z zewnętrznego źródła i to źródło nie mówi ci, do której przestrzeni należą, najbezpieczniej jest założyć sRGB.

Jeśli czytasz kolory z ekranu za pomocą próbnika kolorów Cyfrowy miernik Kolor aplikacji (który zawsze przychodzi z MacOS), należy wybrać Wyświetlanie w Generic RGB lub wyświetlanych w sRGB ale don” t używaj wartości Wyświetl wartości natywne, jeśli zamierzasz używać tych wartości w aplikacjach lub na stronach internetowych. Wartości natywne są tylko tym, czego system naprawdę używa do wyświetlania tego koloru, ale ta kombinacja wygląda tylko w ten sposób w twoim systemie.

Oczywiście nic z tego nie zadziała, jeśli wyświetlacz nie jest prawidłowo skalibrowany. Nowoczesne wyświetlacze mają wbudowany profil kalibracji, który komputery mogą pobierać, a urządzenia mobilne mają również swoją kalibrację na urządzeniu. Jeśli masz starszy monitor lub uważasz, że profil nie jest dokładny (lub nie jest on dokładny ze względu na wyświetlanie starzenia!), Musisz uzyskać sprzęt do kalibracji ekranu i użyć narzędzia takiego jak DisplayCAL, aby wygenerować lepszy profil (bezpłatny, OpenSource, wszystkie główne platformy, obsługuje szeroką gamę sprzętu USB)

Typowe pytanie brzmi, co się właściwie dzieje, jeśli interpretuję wartości RGB zgodnie z niewłaściwą przestrzenią kolorów? Cóż, nie będzie to wyglądało zupełnie nie tak.Jeśli wyświetlasz obraz o mniejszej przestrzeni kolorów, tak jakby był większy, wówczas obraz będzie wyglądał bardzo "żywy" (wszystkie kolory mają dużo nasycenia, kontrasty zostaną wzmocnione, ostrość zostanie wzmocniona), jeśli jest to w przeciwnym razie obraz będzie wyglądał raczej "wyciszony" (kolory będą miały o wiele mniej nasycenia, kontrast zostanie zmniejszony, kruchość zostanie zmniejszona). Zobacz ten przykład: Obraz ma normalną przestrzeń kolorów i jest wyświetlany z prawidłową przestrzenią kolorów po prawej stronie, po lewej stronie jest wyświetlana w szerokiej przestrzeni kolorów, traktując wartości RGB obrazu tak, jakby należały do ​​tej szerokiej przestrzeni kolorów, które w rzeczywistości nie są więc przesadzone vibrancy:

enter image description here

Powiązane problemy