问题描述
|
我是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);
red = load_bitmap( \"frago.png\",NULL);
acquire_screen();
blit(red,screen,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,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:\\ temp \\ MyProgram \\中运行,则映像应位于此同一文件夹中。
另外,某些IDE允许您指定从IDE运行或调试时程序将运行的文件夹,您可以将此路径设置为桌面或将映像复制到程序文件夹。
另一个选择是在load_bitmap调用中指定完整的图像路径,但是我认为这是最糟糕的解决方案,因为该程序仅在图像恰好位于此位置时才起作用。
我也建议添加一个检查为空:
red = load_bitmap(\"frago.png\",NULL);
if(red == NULL)
{
printf(\"Cannot load frago.png\\n\");
return 0;
}