Lekcja 1.0.6 Allegro5 - bitmapy

                                                          BITMAPY:                                     Przykłady z kursu  
 W bibliotece allegro5 mamy możliwość wczytywania, wyświetlania jak i zapisu bitmap w wielu formatach: BMP, PNG, JPG, PCX, TGA. 
 Każdą wczytaną bitmapę możemy obracać, odwracać w poziomie i pionie, skalować, wycinać jej fragment, zapisywać, nadawać przezroczystość. Do tego celu mamy wiele funkcji graficznych.
 Zanim napiszę o wczytywaniu, wyświetlaniu i zapisie bitmap należy wspomnieć o możliwości tworzenia własnych bitmap w pamięci, aby na przykład rysować, wyświetlać tekst na bitmapie, tworzyć warstwy bitmap, zapisywać, itd.
                                                      TWORZENIE BITMAP              
#include <allegro5/allegro.h>// podstawowy nagłówek.
ALLEGRO_BITMAP *al_create_bitmap(int w, int h); // szerokość i wysokość bitmapy,liczby typu int. 
Przykład: 
ALLEGRO_BITMAP *kwadrat = al_create_bitmap(500,500); // tworzymy nową bitmape o podanych wymiarach. 
al_clear_to_color(al_map_rgb(0,120,0)); // nadajemy dany kolor bitmapie, jak i czyścimy podanym kolorem gdy chcemy usunąć wszystko co się na niej znajduje, aby było to możliwe musimy wskazać na nasz kwadrat. 
al_set_target_bitmap(kwadrat); // rysujemy,piszemy na naszej bitmapie kwadrat.
al_set_target_bitmap(al_get_backbuffer(okno));// powrót do naszego okna, lub
al_set_target_backbuffer(okno);
                                                      WCZYTYWANIE  BITMAP         
#include <allegro5/allegro.h> // podstawowy plik nagłówkowy
#include <allegro5/allegro_image.h> //wczytywanie, wyświetlanie i zapis obrazów  BMP,PCX,TGA, JPEG,  PNG. 
#include <allegro5/allegro_native_dialog.h> // plik nagłówkowy do funkcji sprawdzającej wczytanie bitmapy. 
al_init_image_addon(); // inicjowanie bitmap, możliwości odczytu jak i zapisu bitmap. 
al_shutdown_image_addon(); //wyłączenie bitmap. 
Wczytywanie bitmap: 
ALLEGRO_BITMAP *bitmapa = al_load_bitmap("domek.png"); // ładowanie bitmapy w formacie png do pamięci, aby wczytać inny format zmieniamy rozszerzenie:.bmp,.jpg,.pcx,..tga.
if(!bitmapa) {
    al_show_native_message_box(okno, "Błąd", "Coś nie tak",
    "Nie mogę wczytać bitmapy domek!", NULL, ALLEGRO_MESSAGEBOX_ERROR);
     return 0;
    } // sprawdzenie czy bitmapa została poprawnie wczytana.
Jeśli chcemy usunąć z pamięci daną bitmape dajemy   al_destroy_bitmap(obrazek);
                                                               ZAPIS    BITMAP:                       
al_save_bitmap("
ekran.png",al_get_backbuffer(okno)); //zapis całego ekranu, w różnych formatach, .png, .bmp, .jpg, .pcx, .tga. 
al_save_bitmap("zapis.png",bitmapa);// zapis wczytanej lub utworzonej bitmapy, w formatach jak wyżej.
 if(al_key_down(&
klawiatura,ALLEGRO_KEY_Z))al_save_bitmap("ekran.png",al_get_backbuffer(okno));//zapis po wciśnięciu klawisza  Z  
                             Kilka dodatkowych przydatnych funkcji:    
int al_get_bitmap_width(ALLEGRO_BITMAP *bitmapa) // pobranie szerokości danej bitmapy.
int al_get_bitmap_height(ALLEGRO_BITMAP *bitmapa) // pobranie wysokości danej bitmapy.
void al_convert_mask_to_alpha(ALLEGRO_BITMAP *bitmapa, ALLEGRO_COLOR mask_color)//kolor przezroczystości gdy brak go w obrazku(wybór dowolnego koloru).
ALLEGRO_BITMAP *al_clone_bitmap(ALLEGRO_BITMAP *klon) // tworzy kopie bitmapy.
ALLEGRO_BITMAP *al_create_sub_bitmap(ALLEGRO_BITMAP *dziecko, int x, int y,int w, int h); // tworzy kopie bitmapy, lub jej fragment, x i y współrzędne na bitmapie źródłowej, w i h szerokość i wysokość bitmapy docelowej.
ALLEGRO_COLOR al_get_pixel(ALLEGRO_BITMAP *bitmapa, int x, int y); // pobranie koloru piksela z podanej pozycji na bitmapie lub oknie, liczby typu int.

Przykłady:
int szerokosc = al_get_bitmap_width(bitmapa); // bitmapa bitmapa musi być wcześniej wczytana.
int wysokosc = al_get_bitmap_height(bitmapa); // bitmapa bitmapa musi być wcześniej wczytana.
al_convert_mask_to_alpha( bitmapa, al_map_rgb(255,0,255) );//nadanie przezroczystości bitmapie
ALLEGRO_BITMAP *klon = al_clone_bitmap(dolly); // bitmapa dolly musi być wcześniej wczytana.
ALLEGRO_BITMAP *dziecko = al_create_sub_bitmap(rodzic,10, 12, 50, 60);// bitmapa rodzic musi być wcześniej wczytana, wymiary bitmapy docelowej(dziecko) mogą być większe od bitmapy źródłowej.
ALLEGRO_COLOR *kolor = al_get_pixel(bitmapa,19, 68); // bitmapa bitmapa musi być wcześniej wczytana, lub al_get_pixel (al_get_backbuffer(okno),10,10); 


...............................................................................................................
Wyświetla piksel.
al_draw_pixel( x,  y, kolor);
Parametry:
x, y               - pozycja bitmapy na ekranie (liczby typu float).
kolor             - kolor piksela (liczby typu float lub int).
Przykład:
al_draw_pixel( 5, 5, al_map_rgb(255, 255, 255));
..............................................................................................................
Wyświetla bitmapę.
al_draw_bitmap(bitmapa, dx, dy, flaga);
Parametry:
bitmapa        -  ALLEGRO_BITMAP *bitmapa
dx, dy          - pozycja bitmapy na ekranie. (liczby typu float).
flaga            -  odwracanie bitmapy, 0, 1, 2, 3 (liczba typu int). lub
ALLEGRO_FLIP_VERTICAL - odwrócenie w osi x.
ALLEGRO_FLIP_HORIZONTAL - odwrócenie w osi y.









Przykład:
al_draw_bitmap (bitmapa,10,10,ALLEGRO_FLIP_VERTICAL | ALLEGRO_FLIP_HORIZONTAL);// lub 3
...............................................................................................................
Wyświetla skalowalną bitmapę.
al_draw_scaled_bitmap(bitmapa, sx, sy, sw, sh, dx, dy, dw, dh, flaga);
Parametry:
bitmapa          -  ALLEGRO_BITMAP *bitmapa
sx,sy              - pozycja początkowa w osi x i y na bitmapie od której ma być wyświetlana bitmapa (liczby typu float).
sw,sh             - szerokość i wysokość z bitmapy żródłowej w pikselach (liczby typu float).
dx, dy             - pozycja bitmapy na ekranie. (liczby typu float).
dw, dh            - wielkość wyświetlanej bitmapy wyrażona w pikselach (liczby typu float).
flaga               - jak w  al_draw_bitmap
Przykład:
al_draw_scaled_bitmap(bitmapa,15,10,90,90,150,10,128,128,1);
...................................................................................................................
Wyświetla obracalną bitmapę.
al_draw_rotated_bitmap(bitmapa, cx, cy, dx, dy, kat, flaga);
Parametry:
bitmapa     -  ALLEGRO_BITMAP *bitmapa
cx,cy          -  pozycja w osi x i y na bitmapie, względem której ma być obracana bitmapa.(liczby typu float).
dx, dy       - pozycja bitmapy na ekranie. (liczby typu float).
kat             - kąt obrotu w prawo podany radianach. (liczba typu float).
flaga         - jak w  al_draw_bitmap.
Przykład:
al_draw_rotated_bitmap(bitmapa, 64, 64,350, 74, 3.14/4, 0);
..................................................................................................................
Wyświetla wycinek  bitmapy.
al_draw_bitmap_region(bitmapa, sx, sy, sw, sh, dx, dy, flaga);
Parametry:
bitmapa   -  ALLEGRO_BITMAP *bitmapa
sx,sy        - pozycja x i y na bitmapie źródłowej.(liczby typu float).
sw,sh       - szerokość i wysokość bitmapy docelowej.(liczby typu float).
dx, dy      - pozycja bitmapy docelowej na ekranie. (liczby typu float).
flaga        - jak w  al_draw_bitmap.
Przykład:
al_draw_bitmap_region(bitmapa,64,0,64, 64, 520, 60, 0);
....................................................................................................................
Wyświetla skalowalną i obracalną bitmapę.
al_draw_scaled_rotated_bitmap(bitmapa, cx, cy, dx, dy, skalax, skalay, kat, flaga);
Parametry:
bitmapa     -  ALLEGRO_BITMAP *bitmapa
cx,cy        -  pozycja w osi x i y na bitmapie, względem której ma być obracana bitmapa.(liczby typu float).
dx, dy       - pozycja bitmapy na ekranie. (liczby typu float).
skalax, skalay - wielkość bitmapy. (liczby typu float).1 to normalna wielkość,2 to dwa razy większa.
kat           - kąt obrotu w prawo podany radianach. (liczba typu float).
flaga         - jak w  al_draw_bitmap.
Przykład:
al_draw_scaled_rotated_bitmap(bitmapa, 64, 64,90,225, 0.8,1.2,3.14/3,0);
.......................................................................................................................

Brak komentarzy:

Prześlij komentarz