在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了),而且选入后位图在临时设备环境中的位置是左上角!
BitBlt用法
最新推荐文章于 2024-06-06 13:50:35 发布