2009-05-07 16 views

Odpowiedz

21

Szybkie i brudne podejście polega na powtarzaniu intensywności skali szarości dla każdego składnika RGB. Tak więc, jeśli masz skalę szarości 120, oznacza to RGB (120, 120, 120).

Jest to szybkie i brudne, ponieważ efektywna luminancja, jaką uzyskujesz, zależy od rzeczywistej luminancji sub-pikseli R, G i B urządzenia, z którego korzystasz.

7

Szara skala oznacza, że ​​wszystkie wartości mają tę samą intensywność. Ustaw wszystkie kanały (w RGB) równe szarej wartości, a otrzymasz czarno-biały obraz RGB.

+2

No, nie. W rzeczywistości NIE będziesz mieć czarno-białego obrazu. Będziesz miał obraz złożony z różnych odcieni szarości. Na niższym poziomie rzeczywiste piksele będą składać się z czerwonych, zielonych i niebieskich kropek, na poziomach intensywności, tak że osoba oglądająca je z odległości zobaczy neutralny obraz. Wykonaj pętlę oczną i popatrz na nominalnie szare piksele na monitorze. Zobaczysz połączenie czerwonych, zielonych i niebieskich kropek. –

+0

Masz rację, że na ekranie renderowany obraz składa się ze wszystkich RGB patrzących na maginację. Tak więc wszystkie kolory będą reprezentowane na ekranie. Trudno mi zrozumieć, w jaki sposób "Będziesz miał obraz złożony z różnych odcieni szarości" różni się od obrazu w skali szarości. – Erik

+1

Erik, nie ma, ale "obraz w skali szarości" różni się bardzo od "obrazu czarno-białego" (który jest tylko dwoma kolorami). – Aistina

4

Nie można ustawić R, G i B na tę samą wartość (wartość w skali szarości) dla każdego piksela, aby uzyskać właściwy odcień szarości?

+2

Niezupełnie. To zależy od tego, jak będziesz postrzegać kolor. Jak jest skalibrowany monitor lub drukarka? Jakie środowisko wyświetlania zobaczysz w kolorze? JEŚLI kolor zostanie wydrukowany, w jaki sposób drukarka jest skalibrowana, scharakteryzowana? Jakie ustawienia zostały zastosowane dla drukarki i profili ICC? Białe punkty? Jakiego iluminatora użyto do wyświetlenia wydruku? Światło słoneczne? Żarówka symulatora D50? Lampa wolframowa? Do rozsądnego stopnia przybliżenia, R = G = B = wartość szara jest dobrym początkiem. To cię zbliży. –

7

Konwersja skali szarości na RGB jest prosta. Po prostu użyj R = G = B = wartość szara. Podstawową ideą jest to, że kolor (widziany na monitorze pod względem RGB) jest systemem dodatków.

http://en.wikipedia.org/wiki/Additive_color

Dlatego dodawanie czerwonego na zielony wydajnością żółty. Dodaj trochę niebieskiego do tej mieszanki w równych ilościach, a otrzymasz neutralny kolor. Full on [czerwony, zielony, niebieski] = [255 255 255] daje biały kolor. [0,0,0] wydajność monitora czarny. Wartości pośrednie, gdy R = G = B są wszystkie równe, dają nominalnie neutralne kolory o danym poziomie szarości.

Drobny problem zależy od tego, jak postrzegasz kolor, może nie być idealnie neutralny. Zależy to od kalibracji monitora (lub drukarki). Są interesujące głębie nauki o kolorach, z których moglibyśmy przejść od tego momentu. Zatrzymam się tutaj.

25

Jeśli wartość w skali szarości w zmiennej i chcą produkować nową wartość w postaci 0x00RRGGBB, to szybki sposób na to jest:

int rgb = grey * 0x00010101; 

lub równowartość w wybranym języku.

+4

+1 dla prostego mnożenia. Instynkt polega na nurkowaniu w bitowe przesunięcia i bitowe OR, ale jest to o wiele prostsze i po prostu działa. –

+1

Lub 'rgb = szary << 16 | szary << 8 | grey', gdzie '<<' jest operatorem lewostronnym ze znakiem i '|' bitowym włącznie z operatorem OR. – sp00m

Powiązane problemy