VC 如何把界面一区域保存为 bmp 图片文件?
请指点.最好有代码

解决方案 »

  1.   

    我猜想
    用bitblt从窗体的DC往新建的Dc里面复制
    然后再把新建DC里的东西弄到位图里面
      

  2.   

    我这里有一个截取客户区图像并保存成文件的函数,您可以参一下。如果你要贝的区域位置和大小是固定的话,可以修改函数中拷贝区域的大小后直接使用void CTest5View::OnGrabClient() 
    {
    // TODO: Add your command handler code here
    BITMAPINFO bi;//信息头
    void *pBits=NULL;
    CRect rect;//客户区窗口
    GetClientRect(&rect);//默认拷贝区域为客户区大小,可以自行修改rect大小
    int nWidth=rect.right;
    int nHeight=rect.bottom;
    //填充信息头
    ZeroMemory(&bi,sizeof(bi));
    bi.bmiHeader.biSize=sizeof(bi.bmiHeader);
    bi.bmiHeader.biHeight=nHeight;
    bi.bmiHeader.biWidth=nWidth;
    bi.bmiHeader.biPlanes=1;
    bi.bmiHeader.biBitCount=24;
    bi.bmiHeader.biCompression=BI_RGB;
    bi.bmiHeader.biSizeImage=3*nWidth*nHeight;//拷贝客户区至内存DC
    HDC hActiveDC=::GetDC(this->m_hWnd);
    HDC hActiveWndCompatibleDC=CreateCompatibleDC(hActiveDC);
    HBITMAP hActiveWndCompactibleBitmap=CreateCompatibleBitmap(hActiveDC,rect.right,rect.bottom);
    SelectObject(hActiveWndCompatibleDC,hActiveWndCompactibleBitmap);BitBlt(hActiveWndCompatibleDC,0,0,rect.right,rect.bottom,hActiveDC,0,0,SRCCOPY);//保存内存DC
    HDC hBmpFileDC=CreateCompatibleDC(hActiveWndCompatibleDC);
    HBITMAP hBmpFileBitmap=CreateDIBSection(hActiveWndCompatibleDC,&bi,DIB_RGB_COLORS,&pBits,NULL,0);
    SelectObject(hBmpFileDC,hBmpFileBitmap);
    BitBlt(hBmpFileDC,0,0,nWidth,nHeight,hActiveWndCompatibleDC,0,0,SRCCOPY);CString tempFileName=_T("test.bmp");//目标文件名
    HANDLE hFile=CreateFile(tempFileName,GENERIC_WRITE,FILE_SHARE_WRITE,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
    if(hFile!=INVALID_HANDLE_VALUE)
    {
    DWORD dwRet=0;
    //填充文件头
    BITMAPFILEHEADER bmfHeader;
    ZeroMemory(&bmfHeader,sizeof(bmfHeader));
    bmfHeader.bfOffBits=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);
    bmfHeader.bfSize=bi.bmiHeader.biSizeImage+bmfHeader.bfOffBits;
    bmfHeader.bfType='MB';
    WriteFile(hFile,&bmfHeader,sizeof(bmfHeader),&dwRet,NULL);
    WriteFile(hFile,&bi.bmiHeader,sizeof(bi.bmiHeader),&dwRet,NULL);
    WriteFile(hFile,pBits,bi.bmiHeader.biSizeImage,&dwRet,NULL);
    CloseHandle(hFile);

    }
      

  3.   

    也可以把你要拷贝区域的rect做为一个参数传到那个函数里,可以实现你要的功能
      

  4.   

    选定这个区域,然后再结合BMP文件结构,写进去。