Instrukcja użytkowania klasy
BitmapKlasa
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.