1. 程式人生 > >【OPENGL】讀取並顯示BMP檔案

【OPENGL】讀取並顯示BMP檔案

程式碼如下:

#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; }