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

Bitmapa w zasobach projektu Allegro

Ostatnio zmodyfikowano 2009-08-23 13:33
Autor Wiadomość
SideC
Temat założony przez niniejszego użytkownika
Bitmapa w zasobach projektu Allegro
» 2009-08-21 21:17:16
Wczytuję bitmapę w main() instrukcją
BITMAP * obrazek = load_bmp( "nazwaPliku.bmp", default_palette );
 i wszystko jest w porządku.
Chcąc dołączyć bitmapę do programu stworzyłem plik zasobów projektu:
C/C++
//tak wygląda plik zasobów *.rc
obrazek BITMAP "nazwaPliku.bmp"
//a tak jest w main()
BITMAP * obrazek;
 Program działa, ale bitmapa jest czarna. Widać, że brakuje 'default_palette', ale gdzie to włożyć? Z góry dziękuję za pomoc.
P-9695
DejaVu
» 2009-08-21 22:00:34
Jesteś pierwszą osobą, która tego próbuje.

http://www.allegro.cc/forums/thread/230657/230673
Jak coś Ci się uda sklecić podziel się informacjami z nami.

/edit:
Może coś jeszcze znajedziesz pod tym adresem:
http://winprog.org/tutorial/bitmaps.html
P-9697
SideC
Temat założony przez niniejszego użytkownika
» 2009-08-23 13:33:08
Trochę to trwało, ale za to będzie obszernie.
Znalazłem w końcu i przećwiczyłem następujące sposoby dołączania zasobów.
Sposób 1) wykorzystuje tylko mechanizmy Allegro, jest opisany w help'ie allegro.chm i składa się z następujących etapów:
Krok 1. Scalenie wszystkich wykorzystywanych bitmap, fontów, plików muzycznych itd. programem Grabber w jeden plik *.dat - p. help rozdz. Grabber. Jeżeli mamy font w pliku *.ttf, to przerabiamy go najpierw programem FontEd.exe (http://forum.ddt.pl/?Tid=692) na bitmapę. Grabber, oprócz pliku *.dat, produkuje plik nagłówkowy *.h.
Krok 2. Kompilacja naszego programu. W programie należy dołączyć ww. plik nagłówkowy. Do wyjęcia potrzebych zasobów (bitmap, fontów) z pliku *.dat należy w kodzie stosować procedury opisane w help'ie w rozdz. Datafile routines.
Krok 3. Połączenie naszego *.exe z plikiem *.dat poprzez wywołanie programu exedat - p. katalog Tools w Allegro. Opisane jest to w kodzie exexedat.c - p. katalog Examples.

Myślę, że nawet gdy nie chcemy dołączyć plików do naszego *.exe, scalenie w jeden plik *.dat naszych zasobów jest dobrym rozwiązaniem.

Sposób 2) wykorzystuje API. Póki co, udało mi się go sprawdzić dołączając jedną bitmapę. Projekt zawiera 2 pliki: *.cpp i *.rc. Kompilacja daje plik *.exe zawierający bitmapę.
C/C++
//plik zasobów *.rc
obraz1 BITMAP "bitmapa.bmp"
//obraz1 - nazwa zasobu; "bitmapa.bmp" - plik na dysku

//plik main() *.cpp
#include <allegro.h>
#include <winalleg.h>
#include <windows.h>

int WINAPI WinMain( HINSTANCE instat, HINSTANCE, LPSTR, int )
{
    allegro_init();
    install_keyboard();
    set_color_depth( 16 );
    set_gfx_mode( GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0 );
    set_palette( default_palette );
    clear_to_color( screen, 15 );
   
    //wczytanie bitmapy API z zasobu
    HBITMAP bitmapa =( HBITMAP ) LoadImage( instat, "obraz1", IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION );
    //instat - uchwyt programu; "obraz1" - nazwa zasobu;
    //IMAGE_BITMAP - wczytujemy bitmapę; LR_CREATEDIBSECTION - oryginalne kolory
    //patrz http://www.winapi.rox.pl/
   
    //konwersja z API do Allegro
    BITMAP * bbb = convert_hbitmap_to_bitmap( bitmapa );
   
    blit( bbb, screen, 0, 0, 20, 20, bbb->w, bbb->h );
   
    readkey();
   
    allegro_exit();
    return( 0 );
}

P-9751
« 1 »
  Strona 1 z 1