Advertisement
Kojima0502

OpenGL_bitmap

Jan 25th, 2014
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.15 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <GLUT/glut.h>
  4.  
  5. /* 画像についての情報を保存しておく変数・定数 */
  6. #define  IMGFILE  "depth_0010-01_RGB.bmp"
  7. #define  CHANNEL  3  // 画像の色数(R, G, B)
  8. int width;           // 画像の幅
  9. int height;          // 画像の高さ
  10. GLubyte* image;      // ビットマップ画像データを格納
  11.  
  12. /* 関数のプロトタイプ宣言 */
  13. void loadImage(const char* filepath);  // BMP 画像を読み込む
  14.  
  15.  
  16. void display(void)
  17. {
  18.     glClear(GL_COLOR_BUFFER_BIT);
  19.     glClearColor (1.0, 1.0, 1.0, 1.0);
  20.    
  21.     /* 画像の表示 */
  22.     glRasterPos2i(-1, -1);//ビットマップ画像の描画位置を設定する。glRasterPos4 は「同次座標」を用いる場合に使う。
  23.     //なお、x, y, z の値域は、初期設定では -1.0 ~ 1.0。
  24.     glDrawPixels(width, height, GL_RGB, GL_UNSIGNED_BYTE, image);
  25.     //メモリ上に置かれているデータから、画像を「フレームバッファ」(ディスプレイに表示する画像を一時的に保存しておくためのメモリ領域)に書きこむ
  26.     glutSwapBuffers();
  27. }
  28.  
  29. /* 個々のプログラム独自に行なうべき初期化 */
  30. void myInit(void)
  31. {
  32.     loadImage(IMGFILE);
  33.    
  34.     /* ウィンドウ生成前に行なうべき設定 */
  35.     glutInitWindowSize(800, 600);                  // ウィンドウサイズの設定
  36.     glutInitWindowPosition(200, 200);              // 表示位置の設定
  37.     glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);  // ディスプレイモードの設定
  38.     glutCreateWindow("OpenGL");                    // ウィンドウを生成
  39.    
  40.     /* イベント発生時に呼び出される関数の登録 */
  41.     glutDisplayFunc(display);                      // 描画関数(自分自身で定義)を登録
  42. }
  43.  
  44. int main(int argc, char* argv[])
  45. {
  46.     /* 初期化 */
  47.     glutInit(&argc, argv);
  48.     myInit();
  49.    
  50.     /* イベント待機状態に入る */
  51.     glutMainLoop();
  52.    
  53.     return 0;
  54. }
  55.  
  56.  
  57. /* BMP画像の場所を引数にとり、image配列に画像データを格納していく */
  58. void loadImage(const char* filepath)
  59. {
  60.     int i;
  61.     int size;  // 画像のサイズ(幅 * 高さ * 色数)
  62.     FILE* fp;
  63.    
  64.     /* ファイルの読込 */
  65.     fp = fopen("depth_0010-01_RGB.bmp", "rb");
  66.     if (fp == NULL)
  67.     {
  68.         fprintf(stderr, "%sのロードに失敗\n", filepath);
  69.         exit(EXIT_FAILURE);
  70.     }
  71.    
  72.     /* 画像の幅, 高さを取得 */
  73.     fseek(fp, 18, SEEK_SET);  // 画像の幅が格納されている場所までfpを移動
  74.     fread(&width, 4, 1, fp);
  75.     fread(&height, 4, 1, fp);
  76.    
  77.     /* 画像データの読み込み */
  78.     fseek(fp, 54, SEEK_SET);  // 画像データが格納されている場所までfpを移動
  79.     size = width * height * CHANNEL;
  80.     image = (GLubyte* ) malloc(size);
  81.     if (image == NULL)
  82.     {
  83.         fprintf(stderr, "メモリ確保に失敗\n");
  84.         exit(EXIT_FAILURE);
  85.     }
  86.    
  87.     for (i = 0; i < size; ++i)
  88.         fread(&image[i], sizeof(GLubyte), 1, fp);
  89.    
  90.     /* 作業が終わったのでファイルを閉じる */
  91.     fclose(fp);
  92. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement