MFC应用代码
+ -

MFC截图并存储为BMP文件

2021-09-07 18 0
    CRect rect;    
    pdlg->GetClientRect(&rect); 
    CDC* pdc =  pdlg->GetDC();
    CBitmap memBitmap;
    memBitmap.CreateCompatibleBitmap(pdc,rect.Width(),rect.Height());

    CDC memDC;    
    memDC.CreateCompatibleDC(pdc);
    memDC.SelectObject(&memBitmap);
    memDC.BitBlt(0,0,rect.Width(),rect.Height(),pdc,0,0,SRCCOPY); 

    CString str;
    CTime t = CTime::GetCurrentTime ();
    str.Format("%d-%d-%d %d_%d_%d",t.GetYear(),t.GetMonth(),t.GetDay(),t.GetHour(),t.GetMinute(),t.GetSecond());

    CFileDialog dlg(FALSE,"bmp",str,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
        "24位位图(*.bmp)||");


    if(dlg.DoModal()==IDOK)
    {

        FILE* fp = fopen(dlg.GetPathName(),"wb");
        if(fp==NULL)
        {
            MessageBox("创建失败");
            return;
        }

        BITMAPFILEHEADER    header;
        BITMAPINFOHEADER    info;

        header.bfType  = (WORD)0x4d42;
        header.bfReserved1 = 0;
        header.bfReserved2 = 0;
        header.bfSize = rect.Width()*rect.Height()*3+sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);  
        header.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
        fwrite(&header,1,sizeof(BITMAPFILEHEADER),fp);

        info.biBitCount = 24;
        info.biClrImportant = 0;
        info.biClrUsed = 0;
        info.biCompression = BI_RGB;
        info.biHeight = rect.Height();
        info.biPlanes = 1;
        info.biSize = sizeof(BITMAPINFOHEADER);
        info.biSizeImage = 0;
        info.biWidth = rect.Width();
        info.biXPelsPerMeter = 0;
        info.biYPelsPerMeter = 0;
        fwrite(&info,1,sizeof(BITMAPINFOHEADER),fp);

        ULONG num = rect.Width()*rect.Height()*3;

        char* buff;
        try
        {
        buff = new  char[num];
        }
        catch(...)
        {
            buff = NULL;
            MessageBox("图形空间申请失败!");
        }
        GetDIBits(memDC.m_hDC,(HBITMAP)memBitmap.m_hObject,0,rect.Height(),buff,(LPBITMAPINFO)&info,DIB_RGB_COLORS);

        fwrite(buff,1,num,fp);  

        fclose(fp);
        buff?delete [] buff:0;
    }    
    memDC.DeleteDC();

0 篇笔记 写笔记

MFC截图并存储为BMP文件
CRect rect; pdlg->GetClientRect(&rect); CDC* pdc = pdlg->GetDC(); CBitmap memBitmap; memBitmap.CreateCompatibleBit......
作者信息
我爱内核
Windows驱动开发,网站开发
好好学习,天天向上。
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!