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 运行或调试时将运行的文件夹,您可以将此路径设置为桌面或将图像复制到程序文件夹。

另一种选择是在 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 回答