メモリ上に画像イメージバッファがあるとき、それをBMP形式の画像ファイルとして出力するための簡易関数だ。その名もwrite_bmp()。もちろん汎用的なものではないが、こいつを1行呼び出すだけだ。
ただし、以下ソース中の FourByteBoundaryPadding クラスについては、お手数だがこちらからとってきてくれ。このFBBPのおかげで、本関数もここまで短くなり、かつ24bitの場合だって、画像幅が4の倍数という制限もなくなったというわけなんだからな。
#include <windows.h> #include <iostream> void write_bmp( const char* filename, const int width, // 画像の幅 const int height, // 画像の高さ const int pixel_depth, // 1ピクセルあたりの情報3(RGB)か4(RGBA) const unsigned char* buf //BGRBGR..並びの画像データ (上記=3の場合) ) { // Simple BMP Writer (C) 2008 nurs int offbits = 54; int raster_sec_bytes = pixel_depth * width * height; BITMAPFILEHEADER file_header = { 0x4d42, raster_sec_bytes + offbits, 0, 0, offbits, }; BITMAPINFOHEADER info_header = { 40, width, height, 1, 8 * pixel_depth, 0, raster_sec_bytes, 2835, 2835, 0, 0// 解像度値はもちろん適当だ }; FILE* fp = fopen(filename, "wb"); fwrite(&file_header, sizeof(BITMAPFILEHEADER), 1, fp); fwrite(&info_header, sizeof(BITMAPINFOHEADER), 1, fp); { FourByteBoundaryPadding padding(width, height, pixel_depth); padding.DoPadding((void*)buf, !0, Func_fwrite(fp)); } fclose(fp); return; }