C++ Allegro 5.0.8 - al_load_bitmap() возвращает NULL в Linux

Я разрабатываю игру в Allegro 5.0.8, и все шло хорошо, пока я не попытался скомпилировать ее и запустить в Linux (Mint 14)... поэтому я провел тесты Sime;

#include <allegro5/allegro.h>
#include <allegro5/allegro_image.h>
#include <iostream>

int main(void)
{
    al_init();
    ALLEGRO_DISPLAY *screen = al_create_display(800, 600);
    al_init_image_addon();

    ALLEGRO_PATH *path = al_get_standard_path(ALLEGRO_RESOURCES_PATH);
    al_set_path_filename(path, "players.png");
    ALLEGRO_BITMAP *img = al_load_bitmap(al_path_cstr(path, '/'));

    if (img == NULL)
        std::cout << al_path_cstr(path, '/') << std::endl;

    al_draw_bitmap(img, 0, 0, 0);
    al_flip_display();

    while (true){}
    return 0;
}

этот пример прекрасно компилируется, но строка

ALLEGRO_BITMAP *img = al_load_bitmap(al_path_cstr(path, '/'));

возвращает NULL. С другой стороны, линия

std::cout << al_path_cstr(path, '/') << std::endl;

печатает точный абсолютный путь изображения.

Что я делаю не так?


person Sylar    schedule 01.02.2013    source источник
comment
Файлы PNG поддерживаются внешними библиотеками. libpng установлен?   -  person Some programmer dude    schedule 01.02.2013
comment
у меня есть libpng12-0 ..но не libpng12-dev...должен ли я установить его тоже??   -  person Sylar    schedule 01.02.2013
comment
Да, вам, вероятно, это тоже нужно, а также связать с libpng (т.е. -lpng).   -  person Some programmer dude    schedule 01.02.2013
comment
я пытался, и он все еще возвращает NULL... с другой стороны, я пробовал с bmp, и это работает... так что я делаю неправильно?? ... для компиляции я использую: g++ *.cpp -o test -lpng12 pkg-config --libs allegro-5.0 allegro_image-5.0 ... я также пробовал -libpng   -  person Sylar    schedule 01.02.2013
comment
Вы должны проверить, какую ошибку вы получаете, либо с помощью allegro_error, либо с errno.   -  person Some programmer dude    schedule 01.02.2013
comment
я действительно не знаю, как их использовать, но когда программа падает, я получаю сообщение bitmap.c:315: al_draw_tinted_bitmap: Assertion `bitmap' failed.   -  person Sylar    schedule 01.02.2013
comment
allegro_error — это строка, которую вы можете распечатать напрямую, а errno — это целое число, но вы можете использовать strerror, чтобы получить из него строку (например, strerror(errno)).   -  person Some programmer dude    schedule 01.02.2013
comment
Итак, где я должен проверить ошибку? ...потому что в строке al_draw_bitmap(img, 0, 0, 0); программа вылетает из-за того, что img имеет значение NULL   -  person Sylar    schedule 01.02.2013
comment
Он падает, потому что вы передаете указатель NULL в функцию. Если указатель равен NULL, не вызывайте функцию. Вы уже проверяете наличие ошибок в операторе if, там также распечатываете возможные сообщения об ошибках, а затем выходите из программы (или делаете что-то еще). Но что бы вы ни делали, не используйте указатель NULL, кроме как для проверки, является ли он NULL.   -  person Some programmer dude    schedule 01.02.2013


Ответы (1)


у меня есть libpng12-0 ..но не libpng12-dev...должен ли я установить его тоже??

После установки libpng12-dev вам потребуется пересобрать Allegro. Вывод cmake говорит вам, поддерживается ли PNG.

Как только вы пересоберете Allegro с поддержкой PNG, он будет работать, если ваш файл PNG не слишком велик для загрузки на вашу видеокарту.

person Matthew    schedule 02.02.2013