【问题标题】:How to Use a Browsed File in Allegro 5?如何在 Allegro 5 中使用已浏览的文件?
【发布时间】:2015-08-29 01:24:41
【问题描述】:

我需要创建一个非常简单的程序,让用户浏览图像,然后将其用于显示在屏幕上的位图。

我知道如何使用 Allegro 5 创建一个简单的本机文件对话框,但我不知道如何将所选文件用于我的位图。

这是我的代码:

ALLEGRO_FILECHOOSER *filechooser;
    filechooser = al_create_native_file_dialog("C:", "Choose a file.", "*.*;*.jpg;", 1);
    al_show_native_file_dialog(display, filechooser);

当我点击文件时,原生文件对话框消失了,什么也没有发生。我为这个问题搜索了很多,但我找不到我的问题的答案。

如何使用选定的图像创建位图?

【问题讨论】:

    标签: c file allegro5


    【解决方案1】:

    让我们先来看看API 定义了什么:

    • ALLEGRO_FILECHOOSER:文件对话框的句柄。
    • al_show_native_file_dialog:显示与句柄关联的对话框的方法。

    因此,在您创建对话框、初始化并显示它之后,用户将选择一个文件。但是,这个对话框支持一次选择多个文件,这就是 al_get_native_file_dialog_path 中的 size_t i 的用途。

    为了让您知道用户选择了多少文件,您必须调用 al_get_native_file_dialog_count 并将它返回的值存储在某处。

    稍后,您现在将在 al_load_bitmap 函数中调用 al_get_native_file_dialog_path,并使用您要打开的文件的编号,瞧!确实如此,但实现它是做幻灯片应用的一个很好的练习。

    现在举个例子:

    ALLEGRO_FILECHOOSER *filechooser;
    filechooser = al_create_native_file_dialog("C:", "Choose a file.", "*.*;*.jpg;", 1);
    al_show_native_file_dialog(display, filechooser);
    
    /* Actually I will not use this but leaving it here as example only*/
    int counter = al_get_native_file_dialog_count(filechooser);
    
    /* Instead of cycling counter, I will select 1 to refer to the first image selected*/
    const char* path = al_get_native_file_dialog_path(filechooser, 1);
    ALLEGRO_BITMAP *image = al_load_bitmap(path);
    

    之后,您将存储在ALLEGRO_BITMAP 上的图像显示到屏幕上。

    【讨论】:

    • 您好,感谢您的评论!不幸的是,我很困惑,API 并没有真正帮助我:/ i 在这个函数中的目标到底是什么?另外,您能否解释一下al_create_native_file_dialog中的mode是什么?非常感谢您的帮助,但 Allegro 的 GUI 对我来说仍然很奇怪,而且我在任何地方都找不到我的问题的答案:c
    • @Pedro 没问题,但是现在在我的时区是 23:10(晚上 11:10),该睡觉了 :) 明天我编辑这个问题。为了更好地解释这一点,但 i 代表其中一个文件,以防用户在对话框中同时选择多个文件。明天晚上 7 点左右,我有时间编辑这个,所以请注意!
    • 谢谢!我会等:v
    • 非常感谢!现在我明白了一切,程序运行良好!我以为没有人会回答我的问题 :) 顺便问一下,你怎么对 allegro 了解这么多? :O
    • @PedroHenrique 老实说,我学会了如何使用 Allegro 的这个功能,试图为它做一个答案......我已经使用这个库很多年了,但是速度很慢然而,通过制作许多附带项目,我已经掌握了它的流程。只需继续编码,因为实践使之成为大师。他们的 API 文档有时会留下一些不清楚的地方,比如这个例子,但是试着阅读它并理解它是如何与其他一切联系起来的。很高兴它有帮助。
    猜你喜欢
    • 2018-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-03
    • 1970-01-01
    • 2013-08-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多