Я работал над тестированием нескольких вещей, используя SFML 1.4 (Простая и быстрая мультимедийная библиотека) с C++ и Visual C++ 2008 Express Edition. Для того, чтобы избежать внешних изображений с моими графическими программами, я тестируя sf::Image::LoadFromMemory(const char * Data, std::size_t SizeInBytes) функции с растровыми ресурсами загруженной с помощью простого скрипта ресурса:Есть ли способ сохранить BITMAPFILEHEADER при загрузке Bitmap в качестве ресурса Windows?
IDB_SPRITE BITMAP "sprite1.bmp"
В моем коде, чтобы загрузить изображение, чтобы создать с помощью этого растрового ресурса, Я использую следующую процедуру, состоящую из функций API Win32 (я исключал код, который проверяет, чтобы убедиться, что функции 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 в данных ресурсов, чтобы избежать этого?
Вместо этого используйте стандартный тип ресурса RT_RCDATA. Хранение необработанных данных - это то, для чего предназначено. –