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();