2014-04-25 173 views
0

我想從資源文件加載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沒有得到一個錯誤。我可以使用messagebox輸出bits。有人知道我的代碼有什麼問題嗎?

回答

3

GetObject文檔:

如果hgdiobj是一個手柄通過任何其他手段,GetObject只返回寬度,高度和顏色格式位圖的信息創建的位圖。您可以通過調用GetDIBitsGetBitmapBits函數來獲取位圖的位值。

在上下文中,「其他方式」是CreateDIBSection以外的任何其他方式。您沒有使用CreateDIBSection,您正在使用​​。 LR_CREATEDIBSECTION標誌將您置於哪個類別尚不清楚,但解決方法很明確:使用GetDIBits