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

Pliki graficzne

[lekcja] Rozdział 6. Wczytywanie i zapisywanie bitmap.
No dobra... dzisiaj to już zaszalejemy... na całego ;)] Nauczymy się wyświetlać grafikę! To już nie lada wstęp do napisania własnej gry. Otóż, aby wyświetlić jakąś grafikę w Allegro, należy:

zadeklarować wskaźnik typu BITMAP
załadować obrazek do pamięci
i... wyświetlić obrazek ! ;)

Jak widzimy, nie ma w tym nic trudnego... aha... zapomniałem o jednym..., aby wyświetlić obrazek musimy go... mieć :] więc narysujmy sobie jakiś obrazek w Paintcie, u mnie jest to ludzik 40x40 pix, zapisany jako ludek.bmp, plik umieszczamy w tym samym katalogu gdzie nasz projekt! ... A więc do roboty! Oto nasz kodzik:

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 :
BITMAP * ludek = NULL;
 
Ładujemy obrazek do pamięci :

C/C++
ludek = load_bmp( "ludek.bmp", default_palette );
if( !ludek )
{
    set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
    allegro_message( "nie mogę załadować obrazka Ludek !" );
    allegro_exit();
    return 0;
}

No i... oczywiście wyświetlamy nasz obrazek!

C/C++
blit( ludek, screen, 0, 0, 100, 100, ludek->w, ludek->h );
readkey();

Po zabawie na BITMAPach musimy zwolnić pamięć przez nie zajmowaną:
destroy_bitmap( ludek );
 No, i jak zwykle na końcu zamykamy Allegro ;)

C/C++
allegro_exit();
return 0;
}
END_OF_MAIN();

Jak widzicie jest to praktycznie ten sam kodzik co poprzednio... jedyna różnica polega na tym, że teraz zamiast tworzyć bitmapę po prostu ją wczytujemy za pomocą funkcji:

ludek = load_bmp("ludek.bmp",default_palette);

Jej jedynymi argumentami są : ścieżka do pliku wraz z jego nazwą, oraz paleta kolorów... najbezpieczniej dać tu zawsze default_palette i spokój... ;]

Jeśli nie lubimy Windowsowego formatu .BMP możemy używać pokrewnych funkcji:

  • load_bmp - dla formatu BMP
  • load_pcx - dla formatu PCX
  • load_lbm - dla formatu LBM
  • load_tga - dla formatu TGA

Jednak do usuwania przydzielonej pamięci spod wskaźnika używamy zawsze destroy_bitmap.

Obrazek bez tła

Dobra... z wyświetlaniem obrazka nie ma problemu... ale czy zauważyliście, że nasz obrazek został wyświetlony razem z tłem ? Wygląda to naprawdę koszmarnie, aby temu zapobiec musimy zrobić dwie rzeczy:

Po pierwsze tło naszego obrazka powinno być różowe ( koszmarny kolor ;) ( maximum czerwonego i niebieskiego, 0 zielonego )) kolor ten ma wzór makecol(255,0,255); A więc wypełnijmy tło naszego obrazka tym kolorem.

Po drugie zamiast funkcji blit użyjemy masked_blit, dodajmy ją do powyższego kodu zaraz pod funkcją blit:

masked_blit( ludek, screen, 0,0, 200,100, ludek->w, ludek->h);

Funkcja ta jest bardzo podobna do funkcji blit, ma dokładnie te same argumenty, dlatego nie będę ich wyjaśniał. Najważniejsze w tej funkcji jest to, że kopiuje ona prostokątny wycinek pomijając kolor tła, dla trybu 8 bitowego ( 256 kolorów ) jest to barwa czarna czyli kolor o numerze 0. Dla trybów o wyższej głębi kolorów jest to kolor ostro różowy w formacie RGB ma numer 255,0,255.

Zrzut ekranu

Allegro umożliwia nam jeszcze jedną ciekawą funkcję, mianowicie zapisywanie obrazków do pliku. Możemy wybrać jeden z trzech formatów : BMP, TGA, PCX. Aby zapisać ekran z naszego programu używamy funkcji:

save_bitmap("ekran.bmp", screen, default_palette);

Jej argumentami są: nazwa pliku, bitmapa oraz paleta kolorów. Możemy używać również funkcji pokrewnych: save_bmp, save_pcx, save_tga, wtedy w nazwie pliku nie podajemy rozszerzenia.

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
Bitmapy Klawiatura