Я несколько раз тестировал с использованием SFML 1.4 (Простая и быстрая мультимедийная библиотека) с C ++ и Visual C ++ 2008 Express Edition. Чтобы избежать внешних изображений с моими графическими программами, я тестировал функцию sf :: Image :: LoadFromMemory (const char * Data, std :: size_t SizeInBytes) с ресурсами битовой карты, загруженными с использованием простого скрипта ресурса :
IDB_SPRITE BITMAP "sprite1.bmp"
В моем коде для загрузки изображения для создания sf :: Image с использованием этого растрового ресурса я использую следующую процедуру, состоящую из функций Win32 API (я исключил код, проверяющий, чтобы сделать уверен, что функции Win32 не возвращают NULL, чтобы немного сократить это):
HRSRC hResInfo = FindResource(NULL, MAKEINTRESOURCE(IDB_SPRITE), RT_BITMAP);
HGLOBAL hResData = LoadResource(NULL, hResInfo);
char * resourceData = reinterpret_cast<char *>(LockResource(hResData));
После этого я использую функцию sf :: Image :: LoadFromMemory:
MyImage.LoadFromMemory(resourceData, SizeofResource(NULL, hResInfo));
Однако это не работает (я получаю неизвестную ошибку типа файла). После некоторого тестирования я обнаружил, что данные растрового изображения, которые я передаю в функцию LoadFromMemory, не включают BITMAPFILEHEADER (первые 14 байтов), и я считаю, что это является причиной неизвестной ошибки типа файла.
Я могу восстановить BITMAPFILEHEADER вручную и заставить функцию LoadFromMemory работать нормально. Однако мне интересно, есть ли какой-нибудь способ сохранить BITMAPFILEHEADER в данных ресурса, чтобы избежать этого?