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: #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(); 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; }
|
|
SeaMonster131 |
» 2014-03-28 22:00:41 Na pewno wczytałeś plik, który ma przezroczyste tło, bo w kodzie jest wszystko okej. |
|
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
|
|
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. |
|
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 |
|
Gabes |
» 2014-03-29 10:43:05 W WindowsXPkowym paintcie napewno nie a nawet zepsuje i zapisze tylko 24bitowy.
|
|
Fofokus Temat założony przez niniejszego użytkownika |
» 2014-03-29 11:03:19 Dobra już rozumiem. Dzięki wszystkim za pomoc :) |
|
« 1 » |