【OPENGL】讀取並顯示BMP檔案
阿新 • • 發佈:2019-01-09
程式碼如下:
#include <gl/glut.h>
#define FileName "D:\\grab.bmp"
static GLint ImageWidth;
static GLint ImageHeight;
static GLint PixelLength;
static GLubyte* PixelData;
#include <stdio.h>
#include <stdlib.h>
void display(void)
{
// 清除螢幕並不必要
// 每次繪製時,畫面都覆蓋整個螢幕
// 因此無論是否清除螢幕,結果都一樣
// glClear(GL_COLOR_BUFFER_BIT);
// 繪製畫素
glDrawPixels(ImageWidth, ImageHeight,
GL_BGR_EXT, GL_UNSIGNED_BYTE, PixelData);
// 完成繪製
glutSwapBuffers();
}
int main(int argc, char* argv[])
{
// 開啟檔案
FILE* pFile = fopen(FileName, "rb");
if (pFile == 0)
exit(0);
// 讀取圖象的大小資訊
fseek(pFile, 0x0012, SEEK_SET);
fread(&ImageWidth, sizeof(ImageWidth), 1, pFile);
fread(&ImageHeight, sizeof(ImageHeight), 1, pFile);
// 計算畫素資料長度
PixelLength = ImageWidth * 3;
while (PixelLength % 4 != 0)
++PixelLength;
PixelLength *= ImageHeight;
// 讀取畫素資料
PixelData = (GLubyte*)malloc (PixelLength);
if (PixelData == 0)
exit(0);
fseek(pFile, 54, SEEK_SET);
fread(PixelData, PixelLength, 1, pFile);
// 關閉檔案
fclose(pFile);
// 初始化GLUT並執行
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA);
glutInitWindowPosition(100, 100);
glutInitWindowSize(ImageWidth, ImageHeight);
glutCreateWindow(FileName);
glutDisplayFunc(&display);
glutMainLoop();
return 0;
}