如何将vc程序中窗口,或试图的一部分保存到bmp文件中去

myazhe 2003-08-20 11:15:22
我用vc载试图,或窗口中的一个位置画了一个图形,请问怎么讲这个图形保存到bmp文件中去
...全文
28 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
masterz 2003-08-20
  • 打赏
  • 举报
回复
with the IPicture interface, it is pretty easy
void SaveBmp(HBITMAP hbmp, LPCTSTR sIconFileName)
{
if(hbmp==NULL || sIconFileName==NULL)
return;
//warning: this code snippet is not bullet proof.
//do error check by yourself [masterz]
PICTDESC picdesc;
picdesc.cbSizeofstruct = sizeof(PICTDESC);
picdesc.picType = PICTYPE_BITMAP ;
picdesc.bmp.hpal = NULL;
picdesc.bmp.hbitmap = hbmp;
IPicture* pPicture=NULL;
OleCreatePictureIndirect(&picdesc, IID_IPicture, TRUE,(VOID**)&pPicture);
LPSTREAM pStream;
CreateStreamOnHGlobal(NULL,TRUE,&pStream);
LONG size;
HRESULT hr=pPicture->SaveAsFile(pStream,TRUE,&size);
char pathbuf[1024];
strcpy(pathbuf,sIconFileName);
CFile iconfile;
iconfile.Open(pathbuf, CFile::modeCreate|CFile::modeWrite);
LARGE_INTEGER li;
li.HighPart =0;
li.LowPart =0;
ULARGE_INTEGER ulnewpos;
pStream->Seek( li,STREAM_SEEK_SET,&ulnewpos);
ULONG uReadCount = 1;
while(uReadCount>0)
{

pStream->Read(pathbuf,sizeof(pathbuf),&uReadCount);
if(uReadCount>0)
iconfile.Write(pathbuf,uReadCount);
}
pStream->Release();
iconfile.Close();
}

void CsaveviewView::OnSaveview()
{
CClientDC dc(this);
CDC dcmem;
dcmem.CreateCompatibleDC(&dc);
CBitmap bmp;
CRect rc;
GetClientRect(&rc);
bmp.CreateCompatibleBitmap(&dc,rc.Width(),rc.Height());
dcmem.SelectObject(&bmp);
dcmem.BitBlt(0,0,rc.Width(),rc.Height(),&dc,0,0,SRCCOPY);
SaveBmp(bmp,"c:\\a.bmp");
}

zyk100 2003-08-20
  • 打赏
  • 举报
回复
如果只保存客户区里面的内容那就太简单了,你只需要把视图里面的图形COPY到内存CDC就ok了
CClientDC dc(this);
CDC mmdc;
mmdc.CreateCompatibleDC(&dc);
mmdc.BitBlt(0,0,BMP.bmWidth,BMP.bmHeight,pDC,0,0,SRCCOPY);
CBitmap *bmp=mmdc.GetObject();

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧