戻る
ビットマップファイル(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;
}