|
Wpisał doctor
|
|
Piątek, 02. Marzec 2007 03:14 |
|
Odczyt koloru piksela W programach w których operujemy na kolorach, czy to wypełnienia formy, przycisku czy w szczególności pojedynczego piksela zachodzi potrzeba poznania składowych koloru. Dla przykładu podam program do zamiany obrazka kolorowego (głębia kolorów 24 bity) na czarnobiały, składający się z odcieni szarości. Może jeszcze ktoś pamięta czarno-białe telewizory :=) Zasada działania tych urządzeń opierała się na właściwości ludzkiego oka, a mianowicie człowiek bardziej zauważa zmiany natężenia oświetlenia niż zmiany koloru. Parafrazując, kolorowy sygnał musiał być zamieniany na 2 sygnały: sygnał luminacji i sygnał chrominacji.
Składowa luminacji dana jest wzorem Ey = 0.30Er + 0.59Eg + 0.11Eb
I właśnie tu musimy znać trzy składowe sygnału: reg, green i blue. Przykład Kładziemy na formę 1 button i 3 labele. Formę zapełniamy np. czerwonym kolorem (posiada tylko składową red). W zdarzeniu OnClick przycisku wpisujemy Form1->Color = clRed; // zamalowanie formy TColor Kolor = Canvas->Pixels[5] [6]; // odczyt koloru pixela o wsp. x=5,y=6 int czerwony = GetRValue(Kolor); // pobranie wartosci składowej czerwonej int zielony = GetGValue(Kolor); // pobranie wartosci składowej zielonej int niebieski = GetBValue(Kolor); // pobranie wartosci składowej niebieskiej
Label1->Caption = IntToStr(czerwony);
Label2->Caption = IntToStr(zielony);
Label3->Caption = IntToStr(niebieski); |
Funkcję GetR,G,B Value zwracają wartość całkowitą z przedziału 0-255.
Kolor biały ma składowe RGB(255, 255, 255).
|
|
Ostatnia aktualizacja: Piątek, 10. Lipiec 2009 13:59 |