0

私は allegro と c++ の初心者です。ビットマップ コマンドを使用しようとしています。この簡単なプログラムを使用してテストしました。

#include <allegro.h>
BITMAP *red;
int main(){ 
    allegro_init();
    install_keyboard();
    set_color_depth(32);
    set_gfx_mode( GFX_AUTODETECT, 640, 480, 0, 0);  
    red = load_bitmap( "frago.png", NULL);      
    acquire_screen();
    blit(red, screen, 0, 0, 0, 0, 480, 360);
    release_screen();
    readkey();
    destroy_bitmap(red);
    return 0;    
}   
END_OF_MAIN();

問題のファイル「frago.png」は私のデスクトップにあり、大きな赤い四角形です。色は色深度 32 でサポートされています。Mac で Xcode 4 を使用しています。誰かが私を助けることができますか?

4

2 に答える 2

2

Allegro ライブラリは、デフォルトでは .png ファイルを読み取ることができません。他のライブラリ/アドオン (libpng、zlib、loadpng) を使用する必要があります。loadpng はバージョン 4.3.10 から Allegro にバンドルされていますが、libpng と zlib をコンパイラにインストールする必要があります。

load_bitmap() の前に register_png_file_type() を使用する必要があります。

Allegro 4.4 の loadpng アドオンは、そのソース コードに含まれています: https://alleg.svn.sourceforge.net/svnroot/alleg/allegro/branches/4.4/addons/loadpng/

PNG が 8bpp 画像の場合は、そのカラー パレットをロードすることを忘れないでください。

PALETTE palette;
BITMAP* red = load_bitmap("frago.png", palette);
select_palette(palette);
blit(red, screen, 0, 0, 0, 0, red->w, red->h);
unselect_palette();

とにかく、Allegro は画像を自動的に 32bpp に変換するべきだと思います。念のため、load_bitmap() の前にset_color_conversionを使用してみてください。

set_color_conversion(COLORCONV_TOTAL);

最後に、load_png() 関数を直接使用することもできます (load_bitmap を load_png に置き換えます)。

于 2011-04-15T13:17:24.980 に答える
0

プログラムがイメージと同じフォルダで実行されていない場合、プログラムはイメージを見つけられません。

たとえば、プログラムが c:\temp\MyProgram\ で実行されている場合、イメージはこの同じフォルダーに配置する必要があります。

また、一部の IDE では、IDE から実行またはデバッグするときにプログラムを実行するフォルダーを指定できます。このパスをデスクトップに設定するか、イメージをプログラム フォルダーにコピーできます。

もう 1 つのオプションは、load_bitmap 呼び出しで完全なイメージ パスを指定することですが、イメージが正確にこの場所にある場合にのみプログラムが機能するため、これは私の意見では最悪の解決策です。

また、null のチェックを追加することをお勧めします。

red = load_bitmap("frago.png", NULL);
if(red == NULL)
{
    printf("Cannot load frago.png\n");
    return 0;
}
于 2011-04-15T11:32:35.080 に答える