Laboratorium nr 6 1/4
Grafika Komputerowa 2D
Instrukcja
laboratoryjna Temat: Bitmapy, wczytywanie plików, double-buffer w bibliotece Allegro
Przygotował: dr inż. Grzegorz Aukawski, mgr inż. Maciej Lasota
6
1) 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ą wskaznikową
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 wskaznik 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 Opis
Funkcja alokuje obszar w pamięci
BITMAP *create_bitmap_ex(int komputera dla bitmapy o głębi
create_bitmap_ex
koloru i rozmiarach podanych jako
color_depth, int width, int height)
parametry funkcji
Funkcja alokuje obszar w pamięci
BITMAP *create_sub_bitmap(BITMAP komputera dla sub-bitmapy. Jako
create_sub_bitmap
parametry podajemy rozmiar oraz
*parent, int x, y, width, height)
wskaznik na bitmapę (rodzica)
Funkcja alokuje obszar w pamięci
BITMAP *create_video_bitmap(int width, komputera dla video-bitmapy. Jako
create_video_bitmap
parametry podajemy rozmiar
int height)
bitmapy
Funkcja alokuje obszar w pamięci
BITMAP *create_system_bitmap(int komputera dla system-bitmapy.
create_system_bitmap
Jako parametry podajemy rozmiar
width, int height)
bitmapy
void set_clip_rect(BITMAP *bitmap, int x1, Funkcja ustawia nowy prostokąt
set_clip_rect
obcinania dla podanej bitmapy.
int y1, int x2, int y2)
Laboratorium nr 6 2/4
2) 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
Funkcja wczytuje bitmapę oraz
load_bmp BITMAP *load_bmp(const char *filename, RGB *pal)
paletę kolorów z pliku BMP
Funkcja wczytuje bitmapę oraz
load_lbm BITMAP *load_lbm(const char *filename, RGB *pal)
paletę kolorów z pliku LBM
Funkcja wczytuje bitmapę oraz
load_pcx BITMAP *load_pcx(const char *filename, RGB *pal)
paletę kolorów z pliku PCX
Funkcja wczytuje bitmapę oraz
load_tga BITMAP *load_tga(const char *filename, RGB *pal)
paletę kolorów z pliku TGA
Funkcja zapisuje bitmapę do
int save_bitmap(const char *filename, BITMAP *bmp,
save_bitmap dowolnie obsługiwanego
const RGB *pal)
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ę zró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,
draw_sprite bitmapy. Jako parametr
int x, int y)
podajemy pozycje
początkową rysowania
Funkcja kopiuje obszar
bitmapy sprite do drugiej
bitmapy, dokonując zmiany
void stretch_sprite(BITMAP *bmp, BITMAP *sprite,
stretch_sprite rozmiaru. Jako parametry
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,
pivot_sprite bitmapy, dokonując obrotu o
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
draw_sprite_vh_flip bitmapy, dokonując
*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
pivot_scaled_sprite *sprite, int x, int y, int cx, int cy, fixed angle, fixed bitmapy, dokonując obrotu o
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();
Wyszukiwarka
Podobne podstrony:
Laboratorium grafika2D 4Laboratorium grafika3D 4Laboratorium grafika2D 7Laboratorium grafika3D 7Laboratorium grafika2D 3Laboratorium grafika2D 1Laboratorium grafika3D 3Laboratorium grafika3D 5Laboratorium grafika3D 6Laboratorium grafika3D 2Laboratorium grafika2D 2Laboratorium grafika3D 1Rola laboratoriów w świetle wymagań systemów zarządzania jakosciąLaboratorium 3Arch grafika osnovi kompozicii grigoryanwięcej podobnych podstron