戻る

ビットマップファイル(24bit)を作成する

BITMAPFILEHEADER構造体を設定する。
BITMAPINFOHEADER構造体を設定する。
BITMAPFILEHEADER、BITMAPINFOHEADER、RGB画像データの順にファイル出力する。

サンプルコード

サンプル関数
// パラメータ
//  [in]pcFilePath	出力ファイルパス
//  [in]pBuffer	画像データ格納バッファのポインタ
//  [in]lWidth	ビットマップの幅
//  [in]lHeight	ビットマップの高さ
BOOL SaveBitmap(const char *pcFilePath, BYTE *pBuffer, long lWidth, long lHeight)
{
	BITMAPFILEHEADER BmpFileHeader;	// ビットマップファイルヘッダ
	BITMAPINFOHEADER BmpInfoHeader;	// ビットマップ情報ヘッダ
	DWORD ImageSize;				// データサイズ

	// 画像データサイズを求める。
	ImageSize = lWidth * lHeight * 3;

	// BITMAPFILEHEADERを設定する。
	memset(&BmpFileHeader, 0x00, sizeof(BmpFileHeader));
	BmpFileHeader.bfType = ('M' << 8) | 'B';
	BmpFileHeader.bfSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + ImageSize;
	BmpFileHeader.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);

	// BITMAPINFOHEADERを設定する。
	memset(&BmpInfoHeader, 0x00, sizeof(BmpInfoHeader));
	BmpInfoHeader.biSize = sizeof(BITMAPINFOHEADER);
	BmpInfoHeader.biWidth = lWidth;
	BmpInfoHeader.biHeight = lHeight;
	BmpInfoHeader.biPlanes = 1;
	BmpInfoHeader.biBitCount = 24;
	BmpInfoHeader.biCompression = BI_RGB;
	BmpInfoHeader.biSize = ImageSize;

	// 出力ファイルを開く。
	FILE *fp = NULL;
	if (fopen_s(&fp, pcFilePath, "wb") != 0)
	{
		return FALSE;
	}

	// BITMAPFILEHEADERを書き込む。
	if (fwrite(&BmpFileHeader, sizeof(BmpFileHeader), 1, fp) != 1)
	{
		fclose(fp);

		return FALSE;
	}

	// BITMAPINFOHEADERを書き込む。
	if (fwrite(&BmpInfoHeader, sizeof(BmpInfoHeader), 1, fp) != 1)
	{
		fclose(fp);

		return FALSE;
	}

	// 画像データを書き込む。
	if (fwrite(pBuffer, sizeof(BYTE), ImageSize, fp) != (size_t)ImageSize)
	{
		fclose(fp);

		return FALSE;
	}

	// 出力ファイルを閉じる。
	fclose(fp);

	return TRUE;
}
inserted by FC2 system