Laboratorium grafika2D 6

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

6

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


Wyszukiwarka

Podobne podstrony:

więcej podobnych podstron