c++ - Allegro 位图命令返回黑屏

标签 c++ bitmap command allegro

我是 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,请尝试使用 set_color_conversion在 load_bitmap() 之前以防万一:

set_color_conversion(COLORCONV_TOTAL);

最后,您可以尝试直接使用 load_png() 函数(将 load_bitmap 替换为 load_png)。

关于c++ - Allegro 位图命令返回黑屏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5675827/

相关文章:

c++ - 我相信短语 "not previously declared to have external linkage"在 N4140 的§3.5/3 项目符号点 (3.2) 中是多余的

android - 下载的透明背景的png图像显示为黑色背景

linux - 关于bash命令/Linux的两个问题

linux - 使用sed获取单词的第一个字母

c++ - Boost Python 包装的虚拟类-子类返回错误 : did not match C++ signature

c++ - SendInput() 不等于在 C++ 中手动在键盘上按键?

java - Java中的深度缓冲和多边形填充

c++ - 如何在 go 中将 RGB byte[] slice 转换为 image.Image?

swift - 使用 Swift 命令行工具进行颜色输出

c++ - 通过引用修改数组后,为什么它保持不变?