2011-04-15 63 views
0

我是allegro和C++的初学者。我正在尝试使用位图命令。我用这个简单的程序来测试它:有问题Allegro位图命令返回黑屏

#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。有人能帮我吗?

回答

0

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

例如,如果程序在c:\ temp \ MyProgram \中运行,图像应该位于相同的文件夹中。

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

另一种选择是在load_bitmap调用中指定完整的图像路径,但这是我认为最糟糕的解决方案,因为程序只有在图像完全位于此位置时才起作用。

此外,我建议增加一个检查空:

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

我试着用你的第一个建议和检查null。检查空作品,让我离开程序,但它仍然无法加载图像! – Gabe 2011-04-15 11:50:34

+0

按照我评论的方式检查程序执行文件夹,并检查有关png支持的dacap答案。 – bcsanches 2011-04-15 14:32:25

+0

我把文件放在执行文件夹中。 – Gabe 2011-04-15 21:20:17

2

快板库不能由默认读取.png文件。你必须使用一些其他库/插件(libpng,zlib,loadpng)。 loadpng与版本4.3.10中的Allegro捆绑在一起,但是您需要在编译器中安装libpng和zlib。

您必须在load_bitmap()之前使用register_png_file_type()。

快板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(); 

反正我觉得快板应该转换你的形象32bpp的自动,请尝试使用set_color_conversion load_bitmap()之前,以防万一:

set_color_conversion(COLORCONV_TOTAL); 

最后你可以尝试直接使用load_png()函数(用load_png替换load_bitmap)。

+0

register_png_file_type()不是allegro命令,我有libpng,zlib和loadpng。我也尝试过.jpg和.bmp。 – Gabe 2011-04-15 21:19:46

+0

register_png_file_type()是loadpng.h中定义的一个函数,你必须#include“loadpng.h”文件。请参阅https://alleg.svn.sourceforge.net/svnroot/alleg/allegro/branches/4.4/addons/loadpng/loadpng.h 也可以直接使用load_png()(而不是register_png_file_type&load_bitmap)。 – dacap 2011-04-15 23:55:48

+0

没有jpgalleg插件的Allegro不支持jpg格式。你是否将可执行文件与这些插件相链接? (loadpng,jpgalleg等)或者你只是与allegro库连接? (例如只有标志)。 – dacap 2011-04-15 23:58:54