本站首页    管理页面    写新日志    退出


«September 2025»
123456
78910111213
14151617181920
21222324252627
282930


公告

☆★☆★☆★☆★☆★☆
生活的点点记录,以及一些体会...........

喜欢是淡淡的爱,爱是深深的喜欢.

时间会见证一切.......................

欢迎大家指出错误,共同进步..........

期待中..............................

☆★☆★☆★☆★☆★☆


我的分类(专题)

日志更新

最新评论

留言板

链接

世纪音频

 

 


Blog信息
blog名称:
日志总数:162
评论数量:312
留言数量:0
访问次数:947053
建立时间:2005年5月17日




[work]图象处理
文章收藏

oceanblue 发表于 2009/5/8 9:54:59

在VC中显示位图常用取BitBlt()方法,它是将一幅位图从一个设备场景复制到另一个。源和目标DC相互间必须兼容。虽然此方法的功能是这样的,但是我一直没有理解网上一些例子代码,不知道其用到的各DC和位图如何得到,及它们之间的关系。今天工作中要将一些位图显示到窗口中,所以重要学习了一下。我已经将要用的位图导入到工程资源中,所以我可以用:        CBitmap cbmp;        cbmp.LoadBitmap(IDB_BMP1);这样得到一个CBitmap对象。然后:        BITMAP bitmap;        cbmp.GetBitmap(&bitmap);这样得到一个BITMAP对象,之所以要得到此对象是因为从其中可以得到位图的大小数据。然后计算得到要在什么位置显示此位图(可以放在一个CRect rect;对象中)。然后显示此位图,这是最重要的一步:         CDC dcMemory;         dcMemory.CreateCompatibleDC(pDC);         hOldBitmap = dcMemory.SelectObject(&cbmp);          pDC->BitBlt(rect.left,                             rect.top,                             bitmap.bmWidth,                             bitmap.bmHeight,                             &dcMemory,                             0,0,                             SRCCOPY);其中pDC是一个CDC*,是将要在其中显示位图的设备环境。这样位图就已经显示出来了,但是还要释放资源:        cbmp.DeleteObject();        dcMemory.SelectObject(hOldBitmap);        dcMemory.DeleteDC();其中,要将临时设备环境选择入初始时位图,否则将不能正确释放!!总结:要在一个设备环境中显示位图,不能直接在上面“画”(目前我是我么觉得的),需要创建一个与之相兼容的新设备环境然后将位图选择入些新设备环境,然后再从些新设备环境中拷备位图以显示到正确的设备环境中。而选入这个动作相当与已经将位图“画在了临时设备环境中”(实际上并没有画,否则就可以直接选入要画图的 CDC了),而且选入后位图在临时设备环境中的位置是左上角!


阅读全文(2828) | 回复(0) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.047 second(s), page refreshed 144791656 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号