Okej... do tej pory nie zrobiliśmy jeszcze nic ciekawego :(... pora to zmienić! Dlatego dzisiaj zajmiemy się bitmapami!... i nie chodzi tu o Windowsowy format plików graficznych, ale o specjalną strukturę w Allegro służącą do wyświetlania grafiki.
Dobra teraz trochę pocięty kodzik wraz z wyjaśnieniami do czego służą poszczególne fragmenty. Wyczerpujące wyjaśnienia poszczególnych funkcji znajdziecie jak zwykle na końcu. A więc do roboty ! ;D
#include <allegro.h>
int main()
{
allegro_init();
install_keyboard();
set_color_depth( 16 );
set_gfx_mode( GFX_AUTODETECT_WINDOWED, 800, 600, 0, 0 );
clear_to_color( screen, makecol( 128, 128, 128 ) );
Deklarujemy wskaźniki do naszych BITMAP:
BITMAP * obrazek1 = NULL;
BITMAP * obrazek2 = NULL;
A teraz tworzymy nasze bitmapy:
obrazek1 = create_bitmap( 50, 50 );
if( !obrazek1 )
{
set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
allegro_message( "nie mogę załadować obrazka 1 !" );
allegro_exit();
return 0;
}
obrazek2 = create_bitmap( 50, 50 );
if( !obrazek2 )
{
set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
allegro_message( "nie mogę załadować obrazka 2 !" );
allegro_exit();
return 0;
}
Czyścimy i wypisujemy coś na naszych bitmapach:
clear_to_color( obrazek1, makecol( 255, 0, 0 ) );
clear_to_color( obrazek2, makecol( 0, 255, 0 ) );
textout_ex( obrazek1, font, "Ob 1", 2, 2, makecol( 0, 0, 255 ), - 1 );
textout_ex( obrazek2, font, "Ob 2", 2, 2, makecol( 0, 0, 255 ), - 1 );
No i... oczywiście wyświetlamy nasze obrazki !
blit( obrazek1, screen, 0, 0, 100, 100, obrazek1->w, obrazek1->h );
blit( obrazek2, screen, 0, 0, 100, 200, obrazek2->w, obrazek2->h );
readkey();
Po zabawie na BITMAPach musimy zwolnić pamięć przez nie zajmowaną:
destroy_bitmap( obrazek1 );
destroy_bitmap( obrazek2 );
No, i jak zwykle na końcu zamykamy Allegro ;)
allegro_exit();
return 0;
}
END_OF_MAIN();
I to by było na tyle jeśli chodzi o podstawowe informacje na temat wyświetlania BITMAPY na ekranie. Wyjaśnić należy kilka nowych rzeczy:
BITMAP *obrazek1 = NULL;
Jest to deklaracja wskaźnika na bitmapę w Allegro. Jak wiadomo, wskaźniki w C++ wskazują na różne rzeczy, dlatego warto na początki nadać mu wartość NULL.
obrazek1 = create_bitmap(50,50);
Tworzymy naszą bitmapę o wielkości 50 na 50;
if( !obrazek1 )
{
set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
allegro_message( "nie mogę załadować obrazka 1 !" );
allegro_exit();
return 0;
}
Tym kodem sprawdzamy po prostu czy nasza bitmapa powstała. Jeśli nie: włączamy tryb tekstowy i wyświetlamy informację o niepowodzeniu tworzenia bitmapy, wyłączamy allegro i zwracamy wartość 0. Sytuacja na skutek, której nie dojdzie do utworzenia bitmapy może mieć miejsce, gdy nie ma wystarczającej pamięci do jej utworzenia.
blit( obrazek1, screen, 0,0, 100,100, obrazek1->w, obrazek1->h);
Jest to chyba najważniejsza funkcja poznana w dzisiejszej lekcji i jedna z najważniejszych w Allegro. Służy do bezpośredniego kopiowania fragmentu jednej bitmapy na drugą. Jej argumenty to :
Wspomnieć należy, że za pomocą blit nie tylko wyświetlamy coś na ekranie, ale także możemy kopiować fragmenty między bitmapami.
destroy_bitmap(obrazek1);
Po zakończeniu wszelkich operacji na bitmapie i gdy nie jest nam już potrzebna, zwalniamy pamięć przez nią zajmowaną. Jej jedynym argumentem jest wskaźnik do bitmapy, którą chcemy zniszczyć ;)
Kody źródłowe programów
Zadania do tej i innych lekcji znajdziesz
na naszym repozytorium.
Prawa autorskie
Serwis otrzymał zgodę od autora na publikację niniejszego materiału.