VC 如何把界面一区域保存为 bmp 图片文件? VC 如何把界面一区域保存为 bmp 图片文件?请指点.最好有代码 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我猜想用bitblt从窗体的DC往新建的Dc里面复制然后再把新建DC里的东西弄到位图里面 我这里有一个截取客户区图像并保存成文件的函数,您可以参一下。如果你要贝的区域位置和大小是固定的话,可以修改函数中拷贝区域的大小后直接使用void CTest5View::OnGrabClient() {// TODO: Add your command handler code hereBITMAPINFO 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;//拷贝客户区至内存DCHDC 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);//保存内存DCHDC 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);} } 也可以把你要拷贝区域的rect做为一个参数传到那个函数里,可以实现你要的功能 选定这个区域,然后再结合BMP文件结构,写进去。 _variant_t 转换为int 问题? 如何知道哪个按扭发送了TBN_DROPDOWN消息? 各位大侠,请问有股市高手,能不能指点一下炒股需要具备哪些知识和技能呀?多谢!! VC7中添加控件类有2种方法,一种添加Activex控件中的MFC类,一种是添加类型库中的MFC类,请高手说说分别 在处理上G的大文件进行操作的快速方法?(分数追加贴!) 各位大虾,请问能不能将音频文件转换成文本文件,在线等候,小弟谢了先!!! 请问如何给2000server编程添加用户? ###特急++特急!!! 劳动法问题 谢谢大家的热情帮忙!再请问如何显示竖的字体? 串口传输文件 请教对话框刷新闪烁的问题
用bitblt从窗体的DC往新建的Dc里面复制
然后再把新建DC里的东西弄到位图里面
{
// 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);
}
}