Загрузка и преобразование HBITMAP в текстуру OpenGL

Я хочу загрузить HBITMAP из файла ресурсов и использовать его в качестве текстуры OpenGL. Код, который я использую:

HBITMAP hBmp = (HBITMAP) LoadImage(hInstance,
MAKEINTRESOURCE(id), IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION);
BITMAP BM;
GetObject(hBmp, sizeof(BM), &BM);

glPixelStorei(GL_UNPACK_ALIGNMENT, 4);
GLvoid* bits = BM.bmBits;
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, BM.bmWidth,
BM.bmHeight, 0, GL_BGRA_EXT,
GL_UNSIGNED_BYTE,
bits);

Но я всегда получаю сообщение об ошибке из Visual Studio, что у меня нет доступа к указателю bits, Ошибка в последней строке кода:

bits);

Я на самом деле могу использовать указатель NULL вместо bits без получения ошибки. Я могу вывести bits чтобы использовать окно сообщения. У кого-нибудь есть идея, что не так с моим кодом?

0

Решение

От GetObject документация:

Если hgdiobj является дескриптором растрового изображения, созданного любым другим способом, GetObject возвращает только ширину, высоту и информацию о формате цвета растрового изображения. Вы можете получить битовые значения растрового изображения, вызвав GetDIBits или же GetBitmapBits функция.

В контексте «другие средства» — это нечто иное, чем CreateDIBSection, Вы не используете CreateDIBSectionвы используете LoadImage, Какая категория LR_CREATEDIBSECTION флаг ставит вас в тупик, но обходной путь очевиден: использование GetDIBits.

3

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


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