Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[Allegro 5, C++] jak ukryć tło wczytywanych bitmam/ dlaczego raz chowa się samo a raz nie

Ostatnio zmodyfikowano 2014-03-29 11:03
Autor Wiadomość
Fofokus
Temat założony przez niniejszego użytkownika
[Allegro 5, C++] jak ukryć tło wczytywanych bitmam/ dlaczego raz chowa się samo a raz nie
» 2014-03-28 20:19:22
Witam,

tytuł mógł być nieco nie jasny, więc śpieszę z wyjaśnieniem.
No więc tak: w moim programie chciałem sobie wczytać bitmapę, przedstawiającą ludka. Kierowany doświadczeniami z Allegro 4, spodziewałem się, że zostanie on wyświetlony razem z białym tłem, ale odpaliłem program, a tu tło jest przeźroczyste. :O
Pomyślałem sobie: "spoko, pewnie w allegro 5 robi się to samo i nie trzeba wrzucać funkcji typu masked_blit(allegro 4). " No ale zaraz potem pomyślałem sobie, że przecież to idiotyczne, bo co gdybym chciał wczytać obrazek, który jest po części biały, ale kolor biały nie jest tłem. Wczytałem więc drugą bitmapę i ku mojemu zdziwieniu wyświetliła się ona z nieprzeźroczystym tłem. W programie nie wpisywałem żadnych funkcji powodujących przeźroczystość kolorów (a wiem, że takie istnieją) i wygląda to dla mnie dość dziwnie :D
jeśli to pomoże, to wkleję tu kod:
C/C++
#include <allegro5/allegro.h>
#include <allegro5/allegro_image.h>
int main()
{
    int x = 100, y = 100;
    al_init();
    al_install_keyboard();
    al_init_image_addon();
    //al_set_new_display_flags(ALLEGRO_FULLSCREEN);
    ALLEGRO_DISPLAY * okno = al_create_display( 1200, 800 );
    al_set_window_title( okno, "Spodnie Hose" );
   
    ALLEGRO_KEYBOARD_STATE klawiatura;
   
    ALLEGRO_BITMAP * ludek = al_load_bitmap( "image.png" );
    ALLEGRO_BITMAP * kij = al_load_bitmap( "kij.png" );
    ALLEGRO_BITMAP * trawa = al_load_bitmap( "probaallegro.bmp" );
    al_clear_to_color( al_map_rgb( 100, 100, 100 ) );
    while( 1 )
    {
        al_get_keyboard_state( & klawiatura );
        if( al_key_down( & klawiatura, ALLEGRO_KEY_UP ) && y > 0 ) y--;
       
        if( al_key_down( & klawiatura, ALLEGRO_KEY_DOWN ) && y < 800 - 50 ) y++;
       
        if( al_key_down( & klawiatura, ALLEGRO_KEY_RIGHT ) && x < 1200 - 50 ) x++;
       
        if( al_key_down( & klawiatura, ALLEGRO_KEY_LEFT ) && x > 0 ) x--;
       
        if( al_key_down( & klawiatura, ALLEGRO_KEY_ESCAPE ) ) break;
       
        al_clear_to_color( al_map_rgb( 100, 100, 100 ) );
        al_draw_bitmap( trawa, 0, 0, 0 );
        al_draw_bitmap( ludek, x, y, 0 );
        al_draw_bitmap( kij, 500, 400, 0 );
        al_flip_display();
    }
    al_destroy_display( okno );
    al_destroy_bitmap( ludek );
    al_destroy_bitmap( kij );
    al_destroy_bitmap( trawa );
    return 0;
   
   
}
P-107353
SeaMonster131
» 2014-03-28 22:00:41
Na pewno wczytałeś plik, który ma przezroczyste tło, bo w kodzie jest wszystko okej.
P-107364
Fofokus
Temat założony przez niniejszego użytkownika
» 2014-03-29 09:50:47
Plik, który ma przeźroczyste tło? Chyba nie do końca rozumiem :/
wszystkie pliki, które wczytuje, są wczytywane razem z białym tłem (wyświetlane), a tylko ten jeden i tylko on jest wyświetlany bez tła, tzn z przeźroczystym tłem. Nie wspomniałem o tym wcześniej, ale ten obrazek, który wyświetla się z przeźroczystym tłem ściągnąłem stąd: http://www.famitsu.com/freegame/tool/chibi/index1.html
P-107377
Gabes
» 2014-03-29 10:23:52
Zobacz we właściwościach danego obrazka ile bitów zajmuje jeden piksel.
Jeśli 32 to znaczy że kolor przezroczystości został dodany do obrazka, i automatycznie nie będzie wyświetlany. Jak dodać taki kolor?, w bardzo prosty sposób, wrzucasz do jakiegoś programu graficznego gimp, inkscape, polecam mały szybki IrfanView i zapisujesz jako png z kolorem przezroczystości.
P-107378
Fofokus
Temat założony przez niniejszego użytkownika
» 2014-03-29 10:32:41
A tak z ciekawości: da się to zrobić w paincie? bo TO jest obecnie mój "program graficzny" :D
P-107379
Gabes
» 2014-03-29 10:43:05
W WindowsXPkowym paintcie napewno nie a nawet zepsuje i zapisze tylko  24bitowy.
P-107380
Fofokus
Temat założony przez niniejszego użytkownika
» 2014-03-29 11:03:19
Dobra już rozumiem. Dzięki wszystkim za pomoc :)
P-107382
« 1 »
  Strona 1 z 1