to get the file
Transkrypt
to get the file
Laboratorium nr 6 Instrukcja laboratoryjna 6 1) 1/4 Grafika Komputerowa 2D Temat: Bitmapy, wczytywanie plików, double-buffer w bibliotece Allegro Przygotował: dr inż. Grzegorz Łukawski, mgr inż. Maciej Lasota Bitmapy Biblioteka Allegro podczas wywołania funkcji set_gfx_mode() standardowo alokuje w pamięci karty graficznej specjalny obszar będący bitmapą. Obszar ten opisany jest za pomocą struktury BITMAP i dostęp do niego odbywa się poprzez zmienną wskaźnikową screen. Dodatkowo biblioteka Allegro oferuje programiście możliwość tworzenia własnych bitmap w pamięci RAM komputera. Rozróżniamy 4 podstawowe typy bitmap: 1. Memory Bitmap (standardowa bitmapa w pamięci RAM) 2. Sub Bitmap (bitmapa potomna, będąca częścią bitmapy rodzica) 3. Video Memory Bitmap (specjalny rodzaj bitmap, wykorzystywany w grach) 4. System Bitmap (specjalny rodzaj bitmap systemowych) W celu alokacji pamięci dla własnej bitmapy, wywołujemy funkcję: BITMAP *create_bitmap(int width, int height) Funkcja ta zwraca wskaźnik do bitmapy, w przypadku błędu alokacji zwracana jest wartość NULL. Na końcu działania programu należy zwolnić obszar pamięci zajęty przez daną bitmapę za pomocą wywołania funkcji: void destroy_bitmap(BITMAP *bitmap) Nazwa funkcji Parametry create_bitmap_ex BITMAP *create_bitmap_ex(int color_depth, int width, int height) create_sub_bitmap BITMAP *create_sub_bitmap(BITMAP *parent, int x, y, width, height) create_video_bitmap BITMAP *create_video_bitmap(int width, int height) create_system_bitmap BITMAP *create_system_bitmap(int width, int height) set_clip_rect void set_clip_rect(BITMAP *bitmap, int x1, int y1, int x2, int y2) Opis Funkcja alokuje obszar w pamięci komputera dla bitmapy o głębi koloru i rozmiarach podanych jako parametry funkcji Funkcja alokuje obszar w pamięci komputera dla sub-bitmapy. Jako parametry podajemy rozmiar oraz wskaźnik na bitmapę (rodzica) Funkcja alokuje obszar w pamięci komputera dla video-bitmapy. Jako parametry podajemy rozmiar bitmapy Funkcja alokuje obszar w pamięci komputera dla system-bitmapy. Jako parametry podajemy rozmiar bitmapy Funkcja ustawia nowy prostokąt obcinania dla podanej bitmapy. Laboratorium nr 6 2) 2/4 Wczytywanie plików Biblioteka Allegro umożliwia wczytywania różnego rodzaju bitmap z plików. Obsługuje ona następujące formaty plików graficznych: BMP, PCX, TGA, LBM. W celu wczytania bitmapy z dowolnie obsługiwanego pliku wywołujemy funkcję: BITMAP *load_bitmap(const char *filename, RGB *pal) Funkcja ta przyjmuje dwa parametry. Pierwszy parametr jest stałą znakową, będącą nazwą pliku. Drugim parametrem jest zmienna typu PALETTE, zadaniem tej zmiennej jest przechowywanie wczytanej z pliku palety kolorów. Każdą wczytaną bitmapę musimy na końcu zwolnić za pomocą funkcji destroy_bitmap(). Nazwa funkcji Parametry Opis load_bmp BITMAP *load_bmp(const char *filename, RGB *pal) Funkcja wczytuje bitmapę oraz paletę kolorów z pliku BMP load_lbm BITMAP *load_lbm(const char *filename, RGB *pal) Funkcja wczytuje bitmapę oraz paletę kolorów z pliku LBM load_pcx BITMAP *load_pcx(const char *filename, RGB *pal) Funkcja wczytuje bitmapę oraz paletę kolorów z pliku PCX load_tga BITMAP *load_tga(const char *filename, RGB *pal) Funkcja wczytuje bitmapę oraz paletę kolorów z pliku TGA save_bitmap int save_bitmap(const char *filename, BITMAP *bmp, const RGB *pal) Funkcja zapisuje bitmapę do dowolnie obsługiwanego formatu pliku. 3) Kopiowanie bitmap w pamięci W celu skopiowania prostokątnego obszaru jednej bitmapy do drugiej bitmapy, wywołujemy funkcje: void blit(BITMAP *source, BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height); Jako parametry podajemy bitmapę źródłową, bitmapę docelową, współrzędne lewego górnego rogu obszaru oraz wysokość i szerokość obszaru do skopiowania. Funkcja blite() wykorzystywana jest w technice Double Buffernig (podwójnego bufora), czyli technice zapewniającej płynne wyświetlanie obrazów. Każdy kolejny obraz jest wcześniej rysowany w pamięci RAM komputera, po czym zostaje bezpośrednio wyświetlony przez kartę graficzną na ekranie monitora. Laboratorium nr 6 3/4 UWAGA! SPRITE (w Allegro) są to specjalne rodzaje bitmap, służące do przechowywania obrazów np. w grach komputerowych. Możemy na nich operować identycznie jak na zwykłych bitmapach. Nazwa funkcji Parametry Opis Funkcja kopiuje obszar bitmapy sprite do drugiej void draw_sprite(BITMAP *bmp, BITMAP *sprite, bitmapy. Jako parametr draw_sprite int x, int y) podajemy pozycje początkową rysowania Funkcja kopiuje obszar bitmapy sprite do drugiej void stretch_sprite(BITMAP *bmp, BITMAP *sprite, bitmapy, dokonując zmiany rozmiaru. Jako parametry stretch_sprite int x, int y, int w, int h) podajemy pozycję początkową rysowania oraz nową wysokość i szerokość Funkcja kopiuje obszar void rotate_sprite(BITMAP *bmp, BITMAP *sprite, bitmapy sprite do drugiej rotate_sprite bitmapy, dokonując obrotu o int x, int y, fixed angle) podany kąt Funkcja kopiuje obszar bitmapy sprite do drugiej void pivot_sprite(BITMAP *bmp, BITMAP *sprite, bitmapy, dokonując obrotu o pivot_sprite int x, int y, int cx, int cy, fixed angle) podany kąt względem punktu (cx,cy) Funkcja kopiuje obszar void draw_sprite_v_flip(BITMAP *bmp, BITMAP bitmapy sprite do drugiej draw_sprite_v_flip bitmapy, dokonując *sprite, int x, int y) odwrócenia pionowego Funkcja kopiuje obszar void draw_sprite_h_flip(BITMAP *bmp, BITMAP bitmapy sprite do drugiej draw_sprite_h_flip bitmapy, dokonując *sprite, int x, int y); odwrócenia poziomego Funkcja kopiuje obszar bitmapy sprite do drugiej void draw_sprite_vh_flip(BITMAP *bmp, BITMAP bitmapy, dokonując draw_sprite_vh_flip *sprite, int x, int y) odwrócenia pionowego i poziomego Funkcja kopiuje obszar void rotate_scaled_sprite(BITMAP *bmp, BITMAP bitmapy sprite do drugiej rotate_scaled_sprite bitmapy, dokonując obrotu o *sprite, int x, int y, fixed angle, fixed scale) podany kąt i skalowania Funkcja kopiuje obszar void pivot_scaled_sprite(BITMAP *bmp, BITMAP bitmapy sprite do drugiej bitmapy, dokonując obrotu o pivot_scaled_sprite *sprite, int x, int y, int cx, int cy, fixed angle, fixed podany kąt względem punktu scale) (cx,cy) i skalowania void stretch_blit(BITMAP *source, BITMAP *dest, Funkcja kopiuje obszar int source_x, source_y, source_width, jednej bitmapy do drugiej stretch_blit bitmapy, dokonując source_height, int dest_x, dest_y, dest_width, dodatkowo zmiany rozmiaru dest_height) Laboratorium nr 6 4/4 UWAGA! Poniżej zostały przedstawione niektóre funkcje służące do uzyskania efektu przezroczystości, więcej informacji w dokumentacji biblioteki Nazwa funkcji Parametry set_trans_blender void set_trans_blender(int r, int g, int b, int a); set_alpha_blender void set_alpha_blender(); set_write_alpha_blender void set_write_alpha_blender();