background image

Laboratorium nr 6 

1/4 

 

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ą  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 

Opis 

create_bitmap_ex 

BITMAP *create_bitmap_ex(int 

color_depth, int width, int height) 

Funkcja alokuje obszar w pamięci 

komputera dla bitmapy o głębi 

koloru i rozmiarach podanych jako 

parametry funkcji 

create_sub_bitmap 

BITMAP *create_sub_bitmap(BITMAP 

*parent, int x, y, width, height) 

Funkcja alokuje obszar w pamięci 

komputera dla sub-bitmapy. Jako 

parametry podajemy rozmiar oraz 

wskaźnik na bitmapę (rodzica) 

create_video_bitmap 

BITMAP *create_video_bitmap(int width, 

int height) 

Funkcja alokuje obszar w pamięci 

komputera dla video-bitmapy. Jako 

parametry podajemy rozmiar 

bitmapy 

create_system_bitmap 

BITMAP *create_system_bitmap(int 

width, int height) 

Funkcja alokuje obszar w pamięci 

komputera dla system-bitmapy. 

Jako parametry podajemy rozmiar 

bitmapy 

set_clip_rect 

void set_clip_rect(BITMAP *bitmap, int x1, 

int y1, int x2, int y2) 

Funkcja ustawia nowy prostokąt 

obcinania dla podanej bitmapy. 

 

Grafika Komputerowa 2D 

Temat: Bitmapy, wczytywanie plików, double-buffer w bibliotece Allegro 

 

Instrukcja 

laboratoryjna 

Przygotował:  dr inż. Grzegorz Łukawski,  mgr inż. Maciej Lasota 

background image

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 

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. 

 

background image

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 

draw_sprite 

void draw_sprite(BITMAP *bmp, BITMAP *sprite, 

int x, int y) 

Funkcja kopiuje obszar 

bitmapy sprite do drugiej 

bitmapy. Jako parametr 

podajemy pozycje 

początkową rysowania 

stretch_sprite 

void stretch_sprite(BITMAP *bmp, BITMAP *sprite, 

int x, int y, int w, int h) 

Funkcja kopiuje obszar 

bitmapy sprite do drugiej 

bitmapy, dokonując zmiany 

rozmiaru. Jako parametry 

podajemy pozycję 

początkową rysowania oraz 
nową wysokość i szerokość 

rotate_sprite 

void rotate_sprite(BITMAP *bmp, BITMAP *sprite, 

int x, int y, fixed angle) 

Funkcja kopiuje obszar 

bitmapy sprite do drugiej 

bitmapy, dokonując obrotu o 

podany kąt 

pivot_sprite 

void pivot_sprite(BITMAP *bmp, BITMAP *sprite, 

int x, int y, int cx, int cy, fixed angle) 

Funkcja kopiuje obszar 

bitmapy sprite do drugiej 

bitmapy, dokonując obrotu o 

podany kąt względem punktu 

(cx,cy) 

draw_sprite_v_flip 

void draw_sprite_v_flip(BITMAP *bmp, BITMAP 

*sprite, int x, int y) 

Funkcja kopiuje obszar 

bitmapy sprite do drugiej 

bitmapy, dokonując 

odwrócenia pionowego 

draw_sprite_h_flip 

void draw_sprite_h_flip(BITMAP *bmp, BITMAP 

*sprite, int x, int y); 

Funkcja kopiuje obszar 

bitmapy sprite do drugiej 

bitmapy, dokonując 

odwrócenia poziomego 

draw_sprite_vh_flip 

void draw_sprite_vh_flip(BITMAP *bmp, BITMAP 

*sprite, int x, int y) 

Funkcja kopiuje obszar 

bitmapy sprite do drugiej 

bitmapy, dokonując 

odwrócenia pionowego i 

poziomego 

rotate_scaled_sprite 

void rotate_scaled_sprite(BITMAP *bmp, BITMAP 

*sprite, int x, int y, fixed angle, fixed scale) 

Funkcja kopiuje obszar 

bitmapy sprite do drugiej 

bitmapy, dokonując obrotu o 

podany kąt i skalowania 

pivot_scaled_sprite 

void pivot_scaled_sprite(BITMAP *bmp, BITMAP 

*sprite, int x, int y, int cx, int cy, fixed angle, fixed 

scale) 

Funkcja kopiuje obszar 

bitmapy sprite do drugiej 

bitmapy, dokonując obrotu o 

podany kąt względem punktu 

(cx,cy) i skalowania 

stretch_blit 

void stretch_blit(BITMAP *source, BITMAP *dest, 

int source_x, source_y, source_width, 

source_height, int dest_x, dest_y, dest_width, 

dest_height) 

Funkcja kopiuje obszar 

jednej bitmapy do drugiej 

bitmapy, dokonując 

dodatkowo zmiany rozmiaru 

 

 

 

 

 

background image

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