BMPファイルフォーマットで出力

メモリ上に画像イメージバッファがあるとき、それを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;
}