Instrukcja użytkowania klasy Bitmap

bitmap.h

bitmap.cpp

Klasa Bitmap obsługuje pliki graficzne zapisane w formacie “*.bmp” bez kompresji, wyłącznie w wersji TrueColor (24-bit). W tym formacie każdy piksel obrazu reprezentowany jest przez trzy wartości całkowite z zakresu 0-255, odpowiadające kolejno czerwonej (R), zielonej (G) i niebieskiej (B) składowej barwnej. Wartości (R,G,B) równe (0,0,0) odpowiadają barwie czarnej, (255,255,255) - białej, (255,0,0) - czerwonej, (255,255,0) - żółtej, (100,100,100) - szarej itp. Po załadowaniu obrazu z pliku dostęp do poszczególnych pikseli (punktów) realizowany jest za pomocą dwóch metod: pobierającej wartości (R,G,B) piksela i ustawiającej te wartości. Punkty opisywane są przez współrzędną poziomą (x) i pionową (y), przy czym punkt (0,0) znajduje się w lewym górnym rogu obrazu.

Oto podsumowanie metod w klasie Bitmap:

Bitmap();

~Bitmap();

Konstruktor tworzy obiekt nie zawierający danych obrazu.

void Load(char *fname);

void Save(char *fname);

Podstawowe operacje pozwalające na odczytanie i zapisanie obrazu w pliku o podanej nazwie. W przypadku, gdyby operacja nie powiodła się, zgłoszony zostanie jeden z wyjątków:

MemoryError - nie udało się zaalokować pamięci (za mało pamięci)

DiskError - brak pliku lub nie daje się czytać/pisać

FormatNotSupported - to nie jest plik “.bmp” lub nie spełnia warunków opisanych powyżej.

Zapisanie pod nazwą istniejącego pliku spowoduje jego zamazanie. Wybierając pliki do obróbki należy pamiętać, że program ma duże wymagania pamięciowe: alokuje jednorazowo około 2 razy więcej pamięci, niż zajmuje plik na dysku.

long XSize();

long YSize();

Zwraca odpowiednio poziomy i pionowy rozmiar obrazu. Oznacza to, że zakres np. współrzędnej poziomej to 0 - (XSize()-1).

void GetRGBPixel(int x,int y,int &R,int &G,int &B);

void SetRGBPixel(int x,int y,int R,int G,int B);

Pierwsza z tych metod zwraca (przez referencję) składowe (R,G,B) koloru punktu o współrzędnych (x,y). Druga z nich ustawia wartość koloru odpowiedniego piksela (uwaga: patrz opis metody Update()). Wartości R, G i B są kontrolowane i przycinane do zakresu 0-255. Wartości x i y nie są kontrolowane!

void Update();

W wielu sytuacjach dokonując złożonych operacji na obrazie musimy mieć dostęp do poprzednich (przed zmianami) wartości pikseli. Jeżeli np. każdy punkt obrazu chcemy uśrednić z jego ośmioma sąsiadami, to nie możemy tej operacji przeprowadzać na oryginalnych danych, punkt po punkcie (to zaburzyłoby wynik: następny punkt uśredniany byłby m.in. z poprzednim, który jest już uśredniony, i z następnym, który jeszcze się nie zmienił). Dlatego też metoda SetRGBPixel działa nie na oryginalnym obrazie, ale na jego kopii. Metoda Update() służy do uaktualniania oryginału o wszystkie wprowadzone zmiany - dopóki tego nie zrobimy, GetRGBPixel, a także Save, będzie pracowało na danych niezmienionych.

friend ostream& operator<<(ostream&,Bitmap&);

Pomocniczy mechanizm pozwalający na proste wyświetlanie podstawowych informacji o obrazie np. poprzez wykonanie cout << b; gdzie b jest obiektem klasy Bitmap.