W tej lekcji powiemy sobie o parametrach obrazu, na jakim będziemy pracować w GDI, czyli parametrach obrazu w grafice rastrowej.

ROZDZIELCZOŚĆ

Myślę, że każdy wie o co chodzi, dla jasności rozdzielczość to wymiary obrazu rastrowego w pikselach. Zwykle pierwszy z nich to szerokość, natomiast drugi to wysokość. Bitmapa może mieć dowolną rozdzielczość, tutaj nie ma żadnych ograczniczeń (chyba, że wielkość naszej pamięci w komputerze), natomiast jeżeli chodzi nam o obraz wyświetlany na monitorze, czyli rozdzielczość monitora, tutaj nie ma już takiej dowolności. Monitory do komputerów są robione w stosunku 4:3. Czyli szerokość rozdzilczości monitora podzielona przez 4, musi być równa wysokości podzielonej przez 3. W praktyce przyjęło się kilka rozdzielczości na jakiej pracują monitory i karty graficzne: 640x480, 800x600, 1024x768, itd.

CZĘSTOTLIWOŚĆ ODŚWIEŻANIA EKRANU

W przypadku monitorów CRT jest to ilość wyświetlanych klatek na sekundę. Im wyższa tym lepiej, bo oczy się mniej męczą. Przyjmuje się, że już 85Hz nie powoduje wyraźnego zmęczenia oczu.

GŁĘBIA KOLORÓW

Tutaj wypowiem się trochę więcej. Bitmapa składa się z pikseli, a czym jest piksel? Otóż piksel to właśnie cyforwy zapis koloru. Każdy piksel jest w rzeczywistości jakimś kolorem. Można powiedzieć, że bitmapa to dwuwymiarowa tablica w której są zapisane wartości kolorów kolejnych pikseli. Głębia kolorów to właśnie sposób zapisu koloru każdego piksela. Teraz przedstawię każdy format zapisu koloru.

Na początek trzeba jeszcze powiedzieć o formacie RGB i CMYK. W grafice wyświetlanej na monitorze lepszy jest RGB, natomiast CMYK stostuje się raczej w obrazach drukowanych.

RGB - format RGB to zapis koloru w postaci trzech składowych barw, z których może powstać każdy inny kolor, czyli kolejno czerwony, zielony i niebieski (Red Green Blue), w GDI będziemy używać tego formatu. Każda z trzech barw składowych nazywa się kanałem.

FORMAT MONOCHROMATYCZNY

Kiedyś pierwsze monitory używały formatu monochromatycznego, czyli czarno-białego. Piksel mółbyć czarny lub biały(a raczej szary).

FORMAT 16 KOLOROWY

Następnie wprowadzono kolory, pierwsze kolory zapisne były w specjalnej tablicy z kolorami w systemie, tablica ta zawierała 16 możliwych kolorów do wyświetlenia.

FORMAT 256 KOLOROWY

W miarę rozwijania techniki komputerowej, powstała tablica z 256 kolorami.

FORMAT 16-bitowy (High Color)

Tutaj zrezygnowano z tablicy kolorów i zaczęto używania kanałów RBG. Cały zapis koloru zajmował 16 bitów(2 bajty). Pierwsze 5 bitów, opisywało kanał czerwony, kolejne 6 bitów kanał zielony, a nastepne 5 niebieski. Dlaczego to właśnie na kanał zielony przypadł 1 bit więcej? Otóż udowodniono, że ludzkie oko jest bardziej czułe na kolor zielony od pozostałych kolorów, więc bardziej starano się odwzorować zielony.

FORMAT 24-bitowy

W tym formacie może być zapisywana bitmapa, Na każdy kanał przypada po jednym bajcie.

FORMAT 32-bitowy (True Color)

Ten format sie obecnie stosuje. Zapis piksela zajmuje 32 bity, czyli 4 bajty, po każdym bajcie na jeden kanał. Ale zaraz, zaraz, spytasz się co z czwartym bajtem, bo przecież są tylko 3 kanały. Otóż przeznaczono go na tzw. kanał alpha, ale o tym za chwilę. Tak wygląda zapis piksela w tym formacie:

W WinAPI jest zdefiniowane makro RGB, ustala się w nim trzy składowe koloru.

COLORREF bialy=RGB(255,255,255);

COLORREF blekitny=RGB(50,170,255);

COLORREF czarny=RGB(0,0,0);

COLORREF to zmienna na kolor w formacie 32-bitowym.

Kanał alpha określa stopień przezroczytości piksela, 255 to pełny kolor, natomiast 0 to całkiem przeroczysty. Oczywiście przezroczystość nie polega na tym, że piksel się staje nagle przezroczysty, tylko kolor tego piksela jest odpowiednio miksowany z kolorem pod nim i w ten sposób powstaje kolor do wyświetlenia. A oto makro z użyciem kanału alpha, jako pierwszy podajemy kanał alpha:

COLORREF zielony_przez=ARGB(127,0,200,0);

Gdy już mamy wartość koloru i chcemy wyciągnąć składowe używamy odpowiednich makr:

BYTE GetRValue(COLORREF color) - zwraca czerwoną składową z podanego koloru BYTE GetGValue(COLORREF color) - zwraca zieloną składową z podanego koloru
BYTE GetBValue(COLORREF color) - zwraca niebieską składową z podanego koloru

W następnej lekcji zajmiemy się już bezpośrednio GDI.