HBITMAP hbm = LoadImage функция возвращает NULL

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

HBITMAP hbm = (HBITMAP)LoadImage(hInstance,
"C:\\Users\\Jemma\\Desktop\\Maze Game\\Assets\\TILE_01.bmp",
IMAGE_BITMAP,
SWidth, SHeight,
LR_LOADFROMFILE | LR_CREATEDIBSECTION);
if (hbm == NULL || m_Surface == NULL)
{
DWORD lastError = GetLastError();
return 1;
}

Когда я вначале подхожу к этой функции через autos, она говорит: hbm = 0xcccccccc {unused = ???} (я предполагаю, что это из-за не инициализации, так как это происходит, когда я добираюсь до строки, поэтому я не вошел в нее на данный момент — просто подумал, что я поместил бы это просто в случае), после того как я вошел в эту строку, он говорит, что hbm = NULL, и функция GetLastError возвращает 0, который я прочитал, означает, что функция была успешной. Я попытался передать NULL вместо hInstance, я попытался передать имя файла как LPCSTR szFileName — я объявил его как LPCSTR szFileName («C: \ Users \ Jemma \ Desktop \ Maze Game \ Assets \ TILE_01.bmp») ,
Абсолютно не знаю, что попробовать дальше. Любая помощь по этому вопросу будет принята с благодарностью.

0

Решение

Прежде всего, убедитесь, что ваше изображение представляет собой настоящий BMP-файл и может быть открыто с помощью средства просмотра изображений. Затем попробуйте это загрузить HBITMAP, используя LoadImage:

const char* filename = "C:\\Users\\Jemma\\Desktop\\Maze Game\\Assets\\TILE_01.bmp";
HBITMAP bmp = (HBITMAP)LoadImage(NULL, filename,
IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION | LR_DEFAULTSIZE | LR_LOADFROMFILE);
if (hbm == NULL)
{
DWORD lastError = GetLastError();
return 1;
}

Обратите внимание, вам нужно использовать 0, 0 для размеров, когда вы используете LR_DEFAULTSIZEТакже при загрузке из файла нужно использовать LR_LOADFROMFILE, Все они упоминаются в документирование функции LoadImage.

Если при отладчике вы обнаружите что-то неожиданное, вам нужно проверить GetLastError. Если вы проходите через VS отладчик, вы можете просто добавить @err в окне просмотра, и вы всегда увидите последнюю ошибку без изменения вашего кода. Вы также можете добавить его как @err,hr и он покажет вам читабельное описание произошедшей ошибки.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]