[kaze's test] プログラミングメモ →目次

CImageによりBITMAPをファイルに保存(VC++)

C++7.0からCImageクラスが追加されました。CImage はビットマップの拡張サポートを提供するクラスです。JPEG、GIF、BMP、PNG形式のイメージの読み込みや保存などができます。 
CImageのメンバー関数のAttach()で、HBITMAPハンドルに関連する画像データをそのまま使えるようにできます。CImageのメンバー関数のSave()を使って、CImageのオブジェクトの中にある画像を、指定したファイルの拡張子に従って、ファイル保存することができます。 

#include "atlimage.h"
void SaveBitmap(HBITMAP hBitMap)
{
    CImage image;
    image.Attach(hBitMap);
    image.Save(L"d:\\test.bmp");
    image.Save(L"d:\\test.jpg");
    image.Detach();
}
例:View画面のハードコピー。
void CSaveImageTestView::OnEditSaveview()
{
    CClientDC dc(this);
    CBitmap bmpForSave;
    CDC cdcForSave;
    CRect r;
    GetClientRect(&r);

    bmpForSave.CreateCompatibleBitmap(&dc, r.Width(), r.Height());
    cdcForSave.CreateCompatibleDC(&dc);
    cdcForSave.SelectObject(bmpForSave);
    cdcForSave.BitBlt(0, 0, r.Width(), r.Height(), &dc, 0, 0, SRCCOPY);
    SaveBitmap((HBITMAP)bmpForSave);
}
例:View画面のOnDraw()の結果をファイルに保存する。
void CSaveImageTestView::OnEditSaveviewpixsel()
{
    // TODO: Add your command handler code here
    CClientDC dc(this);
    CBitmap bmpForSave;
    CDC cdcForSave;
    CRect r;
    GetClientRect(&r);
    bmpForSave.CreateCompatibleBitmap(&dc, r.Width(), r.Height());
    cdcForSave.CreateCompatibleDC(&dc);
    cdcForSave.SelectObject(bmpForSave);
    OnDraw(&cdcForSave);
    SaveBitmap((HBITMAP)bmpForSave);
}