アプリ版:「スタンプのみでお礼する」機能のリリースについて

今、OpenGLで描画した内容をBMP形式で出力しよう思っています。VC6を使用しています。

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

A 回答 (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/
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/07/29 23:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!