快板位图命令返回黑屏

Allegro bitmap commands return black screen

本文关键字:返回 命令 位图      更新时间:2023-10-16

我是一个初学者在快板和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,有人能帮我吗?

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_png代替load_bitmap)

如果程序没有在与图像相同的文件夹中运行,它将找不到图像。

例如,如果程序在c:tempMyProgram中运行,则图像应该位于同一文件夹中。

此外,一些IDE允许您指定程序在IDE中运行或调试时运行的文件夹,您可以将此路径设置为桌面或将映像复制到程序文件夹。

另一个选择是在load_bitmap调用中指定完整的图像路径,但在我看来这是最糟糕的解决方案,因为程序只会在图像正好位于此位置时工作。

我还建议添加null检查:

red = load_bitmap("frago.png", NULL);
if(red == NULL)
{
    printf("Cannot load frago.pngn");
    return 0;
}