0001: // CBitmap.cpp : ビットマップを保存する
0002: //
0003: 
0004: #include "stdafx.h"
0005: #include "CBitmap.h"
0006: 
0007: 
0008: // ---------------------------------------------------------------------------
0009: // イメージの保存
0010: // ---------------------------------------------------------------------------
0011: void SaveBitMap( SAVE_BITMAP &sInfo )
0012: {
0013:     BITMAPFILEHEADER  bmfh;
0014:     BITMAPINFOHEADER  bmih;
0015:     DWORD tmp;
0016: 
0017:     // BITMAPINFOHEADER の生成
0018:     bmih.biSize = sizeof(BITMAPINFOHEADER);
0019:     bmih.biWidth  = sInfo.iWidth;
0020:     bmih.biHeight = sInfo.iHeight;
0021:     bmih.biPlanes = 1;
0022:     bmih.biBitCount = sInfo.iBitCount;
0023:     bmih.biCompression = BI_RGB;
0024:     bmih.biSizeImage = bmih.biWidth * bmih.biHeight * (bmih.biBitCount / 8);
0025:     bmih.biXPelsPerMeter = 0;
0026:     bmih.biYPelsPerMeter = 0;
0027:     bmih.biClrUsed = 0;
0028:     bmih.biClrImportant = 0;
0029: 
0030:     // BITMAPFILEHEADER の生成
0031:     bmfh.bfType = 0x4D42; // 'BM'
0032:     bmfh.bfReserved1 = bmfh.bfReserved2 = 0;
0033:     bmfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);// データのオフセット
0034:     bmfh.bfSize = bmfh.bfOffBits + bmih.biSizeImage;// サイズ
0035: 
0036:     // ファイルの生成
0037:     HANDLE hfile;
0038:     hfile = CreateFile( sInfo.pFileName, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, 0, NULL);
0039:     
0040:     // BITMAPFILEHEADER の書き込み
0041:     WriteFile(hfile, &bmfh, sizeof(bmfh), &tmp, NULL);
0042:     // BITMAPINFOHEADER の書き込み
0043:     WriteFile(hfile, &bmih, sizeof(bmih), &tmp, NULL);
0044:     // データの書き込み
0045:     SetFilePointer( hfile, bmfh.bfOffBits, NULL, FILE_BEGIN ); // 書き込み位置の移動
0046:     GdiFlush();
0047:     WriteFile( hfile, sInfo.pData, bmih.biSizeImage, &tmp, NULL );
0048:     
0049:     // 閉じる
0050:     CloseHandle(hfile);
0051: }
0052: