Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Tutorial by Easykoder ®
www.easykoder.vot.pl
Biblioteki C++

Bitmapy

[lekcja] Rozdział 5. Tworzenie bitmapy i praca z bitmapą.
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

C/C++
#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:

C/C++
BITMAP * obrazek1 = NULL;
BITMAP * obrazek2 = NULL;

A teraz tworzymy nasze bitmapy:

C/C++
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:

C/C++
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 !

C/C++
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ą:

C/C++
destroy_bitmap( obrazek1 );
destroy_bitmap( obrazek2 );

No, i jak zwykle na końcu zamykamy Allegro ;)

C/C++
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;

C/C++
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 :
  • bitmapa z której chcemy coś skopiować,
  • ]bitmapa na którą chcemy coś skopiować,
  • X,Y lewego górnego rogu wycinka prostokątnego fragmentu odnoszące się do bitmapy źródłowej.
  • pozycja X,Y kopiowanego fragmentu na bitmapie docelowej.
  • Ostatnie dwa to szerokość i wysokość wycinka danych odnoszącego się do bitmapy źródłowej.

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.
Poprzedni dokument Następny dokument
Prymitywy Pliki graficzne