AFAIK,大多數程序員錯過了auxDIBImageLoad()函數,並且沒有記錄的解決方法。 glaux.lib是一個靜態庫,並引入了一些代碼膨脹。
此圖像加載器將工作而不會<glaux.h>:
HBITMAP hbm=LoadBitmap(GetModuleHandle(NULL),MAKEINTRESOURCE(1));
if (!hbm) return false;
BITMAP bm;
GetObject(hbm,sizeof bm,&bm);
BITMAPINFO bmi={sizeof bmi,bm.bmWidth,bm.bmHeight,1,
32}; // 24 = GL_BGR_EXT, 32 = GL_BGRA_EXT; all other fields are 0
DWORD*bits=new DWORD[bm.bmWidth*bm.bmHeight];
GetDIBits(hDC,hbm,0,bm.bmHeight,bits,&bmi,DIB_RGB_COLORS);
...
glTexImage2D(GL_TEXTURE_2D,0,3,bm.bmWidth,bm.bmHeight,0,
GL_BGRA_EXT,GL_UNSIGNED_BYTE,bits);
...
delete[] bits;
DeleteBitmap(hbm);
這個程序會同時處理RGB(24位)和正確索引圖像!無需手動像素旋轉!該示例從數字ID爲1的process.exe資源加載。
LoadBitmap()可由LoadImage()替換以從文件加載。
如果輸入圖像是已知是未壓縮的RGB型的,不需要的GetDIBits,因爲你可以的LoadImage()與LR_CREATEDIBSECTION,訪問使用bmBits指針的位,並使用GL_BGR_EXT恆定。 (不需要新和刪除運營商。)
的GetDIBits需要任何有效的設備上下文句柄成功。如果您沒有方便的話,請使用GetDC/ReleaseDC。
The GL_BGRA_EXT常量是微軟對opengl的擴展,它的使用正是這樣的GetDIBits輸出。
加載壓縮的PNG/GIF/JPG沒有在這裏測試,但應該以相同的方式工作; GetDIBits()是你的朋友。此外,可以將該位圖選擇到存儲設備上下文中(使其成爲繪製畫布),然後使用普通的舊GDI函數(特別是文本寫入函數)修改該位圖以將文本插入到位圖中。