快板位图命令返回黑屏
Allegro bitmap commands return black screen
我是一个初学者在快板和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_png代替load_bitmap)
如果程序没有在与图像相同的文件夹中运行,它将找不到图像。
例如,如果程序在c:tempMyProgram中运行,则图像应该位于同一文件夹中。
此外,一些IDE允许您指定程序在IDE中运行或调试时运行的文件夹,您可以将此路径设置为桌面或将映像复制到程序文件夹。
另一个选择是在load_bitmap调用中指定完整的图像路径,但在我看来这是最糟糕的解决方案,因为程序只会在图像正好位于此位置时工作。
我还建议添加null检查:
red = load_bitmap("frago.png", NULL);
if(red == NULL)
{
printf("Cannot load frago.pngn");
return 0;
}
- 如何使 windows 命令提示符在C++可执行文件上显示返回值?
- 如何通过另一个对象中的命令正确地从一个对象返回数据
- 在 c++ 中从执行的 shell 命令获取返回状态的安全方法是什么?
- 如何在C++中执行命令并获取命令的返回代码标准输出和标准
- 当命令失败时,gzip 会在 C++ 中返回错误代码吗?
- 从 C++ 调用 cURL 命令会返回意外的错误代码,如 1792 和 6656
- C++所有 AT 命令的短信返回错误 |PC<->通过蓝牙和winsocket的移动连接
- 该命令在QProcess中启动,不会返回Linux上的响应
- 在我的场景中,什么可能导致解压缩命令返回 -1
- read() 从命令行返回 EISDIR 错误
- 为什么返回的 FILE* 在 popen() 中的命令失败时保留数据
- 如何将命令从c++应用程序返回到父终端
- C++:如何运行一个系统命令N次(异步)并返回N次执行时间
- 命令分析器的返回集
- 主对话框在命令消息处理程序返回之前销毁
- 如何在 QT Creator 中查看 ShellExecute 命令返回(HINSTANCE ) 代码
- 使用 system() 执行命令返回返回值的 256 倍 ( << 8).这有什么意义
- Libssh不返回命令结果
- 返回命令输入函数
- execvp(),无法直接返回命令行