Растровые команды Allegro возвращают черный экран - PullRequest
0 голосов
/ 15 апреля 2011

Я новичок в 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. Я использую Xcode 4 на Mac.Кто-нибудь может мне помочь?

Ответы [ 2 ]

2 голосов
/ 15 апреля 2011

Библиотека Allegro не может читать файлы .png по умолчанию.Вы должны использовать некоторые другие библиотеки / дополнения (libpng, zlib, loadpng).loadpng связан с Allegro начиная с версии 4.3.10, но вам нужно установить libpng и zlib в ваш компилятор.

Вы должны использовать register_png_file_type () перед load_bitmap ().

Дополнение loadpng Allegro4.4 включен в исходный код: 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).

0 голосов
/ 15 апреля 2011

Если программа не работает в той же папке, что и изображение, она не найдет изображение.

Например, если программа работает в папке c: \ temp \ MyProgram \, изображение должно находиться в этой же папке.

Кроме того, некоторые среды IDE позволяют указывать папку, которую программа будет запускать при запуске или отладке из среды IDE, вы можете установить этот путь на рабочий стол или скопировать изображение в папку программы.

Другой вариант - указать полный путь к изображению в вызове load_bitmap, но, на мой взгляд, это худшее решение, поскольку программа будет работать только тогда, когда изображение находится именно в этом месте.

Также я предлагаю добавить проверку на ноль:

red = load_bitmap("frago.png", NULL);
if(red == NULL)
{
    printf("Cannot load frago.png\n");
    return 0;
}
...