2015-04-14 2 views
0

Я делаю игру в аллегро прямо сейчас, так что я могу научить себя о классах, ориентации объекта и заголовочных файлах, но у меня есть некоторые вопросы по поводу растровых изображений и загрузки ихЧтение Bitmaps из исполняемых ресурсов

я могу загрузить растровые изображения легко с помощью:

ALLEGRO_BITMAP *image = NULL; 
image = al_load_bitmap("image.png"); 

Но я хочу, чтобы импортировать файлы в формате PNG в визуальной студии в качестве ресурсов (с использованием resource.h и project.rc)

Я уже проверил этот ресурс:

https://www.allegro.cc/forums/thread/604040/865263#target

и этот код разбивает мой проект ужасно (портя CMATH и неудачу на функциях таНоса) и больше ничего не приходит близко к тому, что я хочу.

Есть ли способ загрузить растровые изображения из ресурсов, а если нет, то лучший способ интегрировать растровые изображения в исполняемый файл, чтобы мне не пришлось включать в него папку с картинками?

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

спасибо за помощь, о великих волшебники Stack Overflow

ответ

0

Я начал писать менеджер блока контента для проекта Allegro5 в прошлом году и не удосужился его отделки. По сути, моя идея по этой проблеме заключалась в том, чтобы загрузить все мои растровые изображения, собрать нужные данные (ширина, высота, размер файла), а затем написать полученную структуру. Для нескольких файлов вам нужно будет отслеживать смещения (размер файла), необходимые для каждого изображения, написанного для поиска, а затем перезагрузить его в правильной последовательности. Соответствующий код для одного изображения, расширить по мере необходимости:

Заголовок:

struct IMAGE_DATA 
{ 
    ALLEGRO_BITMAP *file; 
    int width; 
    int height; 
    int size; 
}; 

class content_manager 
{ 
private: 
    ALLEGRO_FILE *content; 
    char* bitmap_content_file_name; 
    IMAGE_DATA test; 

    void parse_image_file(IMAGE_DATA, char*); 
public: 
    content_manager(void); 
    ~content_manager(void); 
    void init_bitmap_content(void); 
    void create_bitmap_content_file(void); 
}; 

Класс:

content_manager::content_manager(void) 
{ 
    bitmap_content_file_name = "data.arbitraryextension"; 
} 


content_manager::~content_manager(void) 
{ 
} 

void content_manager::init_bitmap_content(void) 
{ 
    content = al_fopen(bitmap_content_file_name, "rb"); 
    al_fread(content, test.file, test.size); 
} 

void content_manager::create_bitmap_content_file(void) 
{ 
    parse_image_file(test, "images/image.png"); 
    content = al_fopen(bitmap_content_file_name, "wb"); 
    al_fwrite(content, test.file, test.size); 
    al_fclose(content); 
} 

void content_manager::parse_image_file(IMAGE_DATA data, char* path) 
{ 
    data.file = al_load_bitmap(path); 
    data.size = sizeof(data.file); 
    data.width = al_get_bitmap_width(data.file); 
    data.height = al_get_bitmap_height(data.file); 
} 

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

+0

Беглые взгляды делают этот взгляд действительно трудным однако на самом деле чтение кода делает это очень полезным – zawata

Смежные вопросы