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(); #包括 位图*红色; int main(){ 第一快板(); 安装键盘(); 设置颜色和深度(32); 设置gfx_模式(gfx_自动检测,640480,0,0); 红色=加载位图(“frago.png”,NULL); 获取屏幕(); blit(红色,屏幕,0,0,0,0,480,360); 释放屏幕(); readkey(); 销毁位图(红色); 返回0; } _MAIN()的_结尾;

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(); #包括 位图*红色; int main(){ 第一快板(); 安装键盘(); 设置颜色和深度(32); 设置gfx_模式(gfx_自动检测,640480,0,0); 红色=加载位图(“frago.png”,NULL); 获取屏幕(); blit(红色,屏幕,0,0,0,0,480,360); 释放屏幕(); readkey(); 销毁位图(红色); 返回0; } _MAIN()的_结尾;,c++,bitmap,command,allegro,C++,Bitmap,Command,Allegro,有问题的文件“frago.png”位于我的桌面上,是一个大的红色矩形。颜色深度32支持该颜色。我正在Mac上使用Xcode 4。有人能帮我吗?如果程序与图像不在同一文件夹中运行,它将找不到图像 例如,如果程序在c:\temp\MyProgram\中运行,则映像应位于同一文件夹中 此外,某些IDE允许您指定在IDE中运行或调试时程序将运行的文件夹,您可以将此路径设置到桌面或将图像复制到程序文件夹 另一个选项是在load_bitmap调用中指定完整图像路径,但我认为这是最糟糕的解决方案,因为该程序仅

有问题的文件“frago.png”位于我的桌面上,是一个大的红色矩形。颜色深度32支持该颜色。我正在Mac上使用Xcode 4。有人能帮我吗?

如果程序与图像不在同一文件夹中运行,它将找不到图像

例如,如果程序在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;
}

默认情况下,Allegro库无法读取.png文件。您必须使用其他一些库/插件(libpng、zlib、loadpng)。loadpng与4.3.10版的Allegro捆绑在一起,但您需要在编译器中安装libpng和zlib

在加载位图()之前,必须使用register\u png\u file\u type()

Allegro 4.4的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,尝试在加载前使用_bitmap(),以防万一:

set_color_conversion(COLORCONV_TOTAL);

最后,您可以尝试直接使用load\u png()函数(将load\u位图替换为load\u png)。

我尝试使用您的第一个建议并检查null。空值的检查可以让我退出程序,但它仍然无法加载图像!在我发表评论时检查程序执行文件夹,并检查关于png支持的dacap应答。我将该文件放在执行文件夹中。您是否加载了png图像的附加组件?查看@dacap应答,他解释了一个用于向allegro添加png图像支持的附加组件,您是否将附加组件代码添加到项目中?注册png文件类型()不是allegro命令,我有libpng、zlib和loadpng。我还尝试了.jpg和.bmp.register_png_file_type()是loadpng.h中定义的函数,必须包含“loadpng.h”文件。另请参见,您可以直接使用load_png()(而不是register_png_file_type&load_bitmap)。没有jpgalleg插件的Allegro不支持jpg格式。您是否将可执行文件与这些插件链接?(loadpng、jpgalleg等)或者您只是在链接allegro库?(例如,仅限拉列格旗)。快板5.0?但是您使用的API来自Allegro 4。请参阅(与完全不同)并阅读。API已经完全改变了,我认为你应该将你的程序与-lallegro和-lallegro_main链接起来。你还没有编译Allegro 5。开始下载,按照README_macosx.txt的说明进行操作。你需要安装,因为这是Allegro 5使用的建筑系统。那你应该。祝你好运,在你能够使用自述步骤编译整个库+示例之前,你甚至不会尝试编译自己的程序。