保存DC到BMP文件

BOOL SaveDcToBMP(HDC m_hdcMem)  
{  
    BOOL        bReturn         = TRUE;  
    HANDLE    hFile              = NULL;  //handle of bitmap file which will be saved  
    DWORD     dwWritten     = 0;     //written count  
    DWORD     dwOffsetSize = 0;  
    DWORD     dwBufferSize = 0;  
    WORD      wBitCount       = 32;   //位图中每个像素所占字节数    
    HBITMAP   hbitmapSave  = NULL;  
    HBITMAP   hbitmapOld   = NULL;  
    HDC       hDcDev             = NULL;  
    HDC       hDcMem       = NULL;  
    BYTE      *pBmpBuffer  = NULL;  
    int       iBits        = 0;  
    BITMAP           stSrcbmp;  
    BITMAPINFO       srcdibbmap;  
    BITMAPFILEHEADER bmFileHeader; //位图文件头结构  
    SecureZeroMemory(&stSrcbmp, sizeof(BITMAP));  
    SecureZeroMemory(&srcdibbmap, sizeof(BITMAPINFO));  
    SecureZeroMemory(&bmFileHeader, sizeof(BITMAPFILEHEADER));  
    // Fill bitmap information constructor  
    srcdibbmap.bmiHeader.biSize           = sizeof(BITMAPINFOHEADER);  
    srcdibbmap.bmiHeader.biWidth          = WVGA_WIDTH;  
    srcdibbmap.bmiHeader.biHeight         = WVGA_HIGHT;  
    srcdibbmap.bmiHeader.biPlanes         = 1;  
    srcdibbmap.bmiHeader.biBitCount       = wBitCount;  
    srcdibbmap.bmiHeader.biCompression    = BI_RGB;  
    hDcMem = CreateCompatibleDC(NULL);  
    if (NULL == hDcMem)  
    {  
        bReturn = FALSE;  
        goto Exit;  
    }  
    hbitmapSave = CreateDIBSection(hDcMem, &srcdibbmap, DIB_RGB_COLORS, (void**)&pBmpBuffer, NULL, 0);  
    if (NULL == hbitmapSave)  
    {  
        bReturn = FALSE;  
        goto Exit;  
    }  
    hbitmapOld  = (HBITMAP)SelectObject(hDcMem, hbitmapSave);  
    if (NULL == hbitmapOld)  
    {  
        bReturn = FALSE;  
        goto Exit;  
    }  
    //将传进来的DC画到定义的内存DC上去  
    if(!StretchBlt(hDcMem,   
                    0,   
                    0,   
                    WVGA_WIDTH,   
                    WVGA_HIGHT,   
                    m_hdcMem,   
                    0,   
                    0,   
                    m_iScaleWidth,   
                    m_iScaleHight,   
                    SRCCOPY))  
        {  
            bReturn = FALSE;  
            goto Exit;  
        }  
      
    if (0 == GetObject(hbitmapSave, sizeof(stSrcbmp), &stSrcbmp))  
    {  
        bReturn = FALSE;  
        goto Exit;  
    }  
    dwBufferSize = stSrcbmp.bmWidth * stSrcbmp.bmHeight * wBitCount / 8;  
    dwOffsetSize = (DWORD)sizeof(BITMAPFILEHEADER) + (DWORD)sizeof(BITMAPINFOHEADER);  
    // Fill bitmap header constructor  
    bmFileHeader.bfType = 0x4D42;       
    bmFileHeader.bfSize = dwOffsetSize + dwBufferSize;  
    bmFileHeader.bfReserved1 = 0;  
    bmFileHeader.bfReserved2 = 0;  
    bmFileHeader.bfOffBits   = dwOffsetSize;  
      
    hFile = CreateFile(m_wszPicPath, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);  
    if (INVALID_HANDLE_VALUE == hFile)  
    {  
        bReturn = FALSE;  
        goto Exit;  
    }  
    if (!WriteFile(hFile, &bmFileHeader, sizeof(BITMAPFILEHEADER), &dwWritten, NULL))  
    {  
        bReturn = FALSE;  
        goto Exit;  
    }  
    if (!WriteFile(hFile, &srcdibbmap, sizeof(BITMAPINFO), &dwWritten, NULL))  
    {  
        bReturn = FALSE;  
        goto Exit;  
    }  
    if (!WriteFile(hFile, pBmpBuffer, dwBufferSize, &dwWritten, NULL))  
    {  
        bReturn = FALSE;  
        goto Exit;  
    }  
    bReturn = TRUE;  
Exit:  
    if (INVALID_HANDLE_VALUE != hFile)  
    {  
        CloseHandle(hFile);  
        hFile = INVALID_HANDLE_VALUE;  
    }  
    return bReturn;  


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/infsafe/archive/2010/01/05/5138768.aspx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值