首页
社区
课程
招聘
怎么把屏幕的某个部分保存为Bmp
2005-11-11 12:29 5444

怎么把屏幕的某个部分保存为Bmp

2005-11-11 12:29
5444
用的是SDK方式写的程序,已经得到了DC和Rect,
用什么API可以把那部分图象保存到bmp?

阿里云助力开发者!2核2G 3M带宽不限流量!6.18限时价,开 发者可享99元/年,续费同价!

收藏
点赞7
打赏
分享
最新回复 (3)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
心已欠费 2005-11-12 23:57
2
0
画图工具撒,我只晓得这个
雪    币: 214
活跃值: (70)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
fengercn 2005-11-13 08:51
3
0
mfc我会,API不会
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
dongle2001 2006-4-26 18:11
4
0
BOOL CGetScreenTableDlg::CopyScreenToBitmap(CRect rect)
{
        CDC dc;
        dc.CreateDC("DISPLAY",NULL,NULL,NULL);
        CBitmap bm;

        bm.CreateCompatibleBitmap(&dc,rect.Width(),rect.Height());
        CDC tdc;
        tdc.CreateCompatibleDC(&dc);
        CBitmap*pOld=tdc.SelectObject(&bm);
        tdc.BitBlt(0,0,rect.Width(),rect.Height(),&dc,rect.left,rect.top,SRCCOPY);
        tdc.SelectObject(pOld);
        BITMAP btm;
        bm.GetBitmap(&btm);
        DWORD size=btm.bmWidthBytes*btm.bmHeight;
        LPSTR lpData=(LPSTR)GlobalAllocPtr(GPTR,size);

        BITMAPINFOHEADER bih;
        bih.biBitCount=btm.bmBitsPixel;
        bih.biClrImportant=0;
        bih.biClrUsed=0;
        bih.biCompression=0;
        bih.biHeight=btm.bmHeight;
        bih.biPlanes=1;
        bih.biSize=sizeof(BITMAPINFOHEADER);
        bih.biSizeImage=size;
        bih.biWidth=btm.bmWidth;
        bih.biXPelsPerMeter=0;
        bih.biYPelsPerMeter=0;
        GetDIBits(dc,bm,0,bih.biHeight,lpData,(BITMAPINFO*)&bih,DIB_RGB_COLORS);
        BITMAPFILEHEADER bfh;
        bfh.bfReserved1=bfh.bfReserved2=0;
        bfh.bfType=((WORD)('M'<< 8)|'B');
        bfh.bfSize=54+size;
        bfh.bfOffBits=54;

        CString strFilter = "BMP Files (*.bmp)|*.bmp|";   
        CString m_wszFileName= "CopyScreen.bmp";
        CFileDialog dlgSave(FALSE, NULL, m_wszFileName, OFN_PATHMUSTEXIST | OFN_HIDEREADONLY, strFilter);
        if (dlgSave.DoModal() == IDCANCEL)
                return FALSE;
        m_wszFileName = dlgSave.GetPathName();
        CFile bf;
        if(bf.Open(m_wszFileName,CFile::modeCreate|CFile::modeWrite))
        {
                bf.WriteHuge(&bfh,sizeof(BITMAPFILEHEADER));
                bf.WriteHuge(&bih,sizeof(BITMAPINFOHEADER));
                bf.WriteHuge(lpData,size);
                bf.Close();       
        }
        GlobalFreePtr(lpData);
       
        return TRUE;
}
游客
登录 | 注册 方可回帖
返回