【问题标题】:Why do allegro crash when blitting? What does these debug reports mean?为什么allegro在blitting时会崩溃?这些调试报告是什么意思?
【发布时间】:2014-08-10 22:56:43
【问题描述】:

我在 c++ 中使用 code::blocks 中的 allegro 库进行编程。我声明了一个位图,加载了位图并 blit 图像以测试位图是否被绘制到屏幕中。我编译了这个程序,编译器没有发现错误。当我运行程序时,位图未绘制到屏幕上,并且 allegro 崩溃了。我更改了颜色深度,并确保我在代码中包含了不会使 allegro 崩溃但仍无济于事的内容。然后我运行调试,看看这个程序是否有问题。我收到这条消息:

    sigsegv segmentation fault

    #0 10004DDD colorconv_blit_24_to_15() (C:\Windows\SysWOW64\alleg42.dll:??)
    #1 0028FE3C ?? () (??:??)
    #2 1006C3E0 get_uformat() (C:\Windows\SysWOW64\alleg42.dll:??)

这是什么意思,我该如何解决?有什么解决办法吗? 这是我的代码:

$

  #include <allegro.h>

    using namespace std;

int main()
{
allegro_init();
install_keyboard();
set_color_depth(8);
set_gfx_mode(GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0);

BITMAP *link=NULL;
link=load_bitmap("cave.bmp",NULL);

blit(link,screen,0,0,0,0,25,177);

readkey();

destroy_bitmap(link);
allegro_exit();

return 0;
}
END_OF_MAIN()

【问题讨论】:

  • 为什么你认为不检查 link 是否为 null 而是在 Stack Overflow 上发布是可以的?! 我们应该如何知道您的图片是否已加载?
  • 我检查了它并试图解决涉及“null”的问题,但加载位图时 allegro 仍然崩溃。我浏览了所有论坛,了解 allegro 崩溃的原因并按照他们的建议进行操作,但仍然没有发生任何事情,这就是我在 Stack Overflow 上发布此内容的原因。
  • 如果 "cave.bmp" 存在并且是有效的 .bmp 文件,则此代码可以正常工作。我的猜测是您的 Cave.bmp 版本在指定的路径中不存在(没有路径与可执行文件的路径相同),或者它无效。您没有检查 load_bitmap 是否返回非空指针这一事实也是一个问题。

标签: c++ bitmap allegro


【解决方案1】:

解决了!!!

我明白了 allegro 崩溃的原因。我使用 Gimp 编辑我的位图,然后在 code::blocks 中将其加载到 allegro。对于使用旧 allegro 库加载位图的每个人,不要使用 Gimp。使用任何其他图像编辑软件,如paint.net。

更新: 我用 gimp 试验了我的位图,结果当我将图像导出为位图时,另一个弹出窗口向我显示了兼容性选项和高级选项。对于所有使用 allegro 库的人,请忽略顶部。您可以使用 Gimp,但是当您在单击“导出”后弹出该选项时,单击兼容性选项左侧的加号,该选项将下拉并单击“不写色彩空间信息”的检查然后点击导出。这应该可以在快板上正常工作并加载。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-24
    • 1970-01-01
    • 2012-03-03
    • 2011-09-07
    • 1970-01-01
    • 2011-03-07
    • 1970-01-01
    相关资源
    最近更新 更多