• ベストアンサー

OpenGLによる描画内容をBMP出力

今、OpenGLで描画した内容をBMP形式で出力しよう思っています。VC6を使用しています。 今のところ、  ・glReadBuffer で読み取るバッファを指定する  ・glReadPixels バッファから情報を読み取る ということぐらいしかわかっていなくて、 このあとどうすればBMPファイルとして出力できるのかがわかりません。 どなたか教えていただけないでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • 03_
  • ベストアンサー率100% (1/1)
回答No.1

BMPのファイルフォーマットにしたがってファイルを書き出せばよいのではないでしょうか。 ファイル構造 → http://www.kk.iij4u.or.jp/~kondo/bmp/ #include <windows.h> #include <stdio.h> #include <malloc.h> /* filname: 出力ファイル名 width: 画像横幅 height: 画像縦幅 bpp: 画像色深度(bits per pixel) この例ではbpp=24専用 */ bool bmp_out(char* filename, int width, int height, int bpp) { unsigned char *buffer; int scanline = ((width * bpp + 31) & ~31) / 8; // 4byte境界 int image_size = scanline * height; buffer = (unsigned char*) malloc(image_size); if(!buffer) return false; glFlush(); glReadPixels(0, 0, width, height, GL_BGR_EXT, GL_UNSIGNED_BYTE, buffer); /* 1 */ BITMAPFILEHEADER bfh; BITMAPINFOHEADER bih; ZeroMemory(&bfh, sizeof(BITMAPFILEHEADER)); bfh.bfType = ((WORD) 'B' | 'M' << 8); bfh.bfSize = sizeof(BITMAPFILEHEADER); bfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER); /* 2 */ ZeroMemory(&bih, sizeof(BITMAPINFOHEADER)); bih.biSize = sizeof(BITMAPINFOHEADER); bih.biWidth = width; bih.biHeight = height; bih.biPlanes = 1; bih.biBitCount = bpp; FILE *fp = fopen(filename, "w"); if(fp) { fwrite(&bfh, sizeof(BITMAPFILEHEADER), 1, fp); fwrite(&bih, sizeof(BITMAPINFOHEADER), 1, fp); /* 3 */ fwrite(buffer, image_size, 1, fp); fclose(fp); } else { free(buffer); return false; } free(buffer); return true; } /* */の部分はbppの変更により変更する必要のある箇所です。

参考URL:
http://www.kk.iij4u.or.jp/~kondo/bmp/
k314593
質問者

お礼

御回答有難うございました。 なんとか解決できそうです。 助かりました。

関連するQ&A