[英]Allegro bitmap commands return black screen
我是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。 有人能帮我吗?
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)。
如果程序未在与图像相同的文件夹中运行,则无法找到图像。
例如,如果程序在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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.