【MFC】CDC::BitBlt介绍
CDC::BitBlt介绍
2011-11-04 08:25 19576人阅读 评论(6) 收藏 举报
摘自:
http://blog.csdn.net/bberdong/article/details/6934270
设备上下文绘图有很多种方法。例如通过创建位图画刷,利用其填充一个区域来实现图像的绘制。此外,还可以使用CDC类的位图函数来输出位图到设备上下文中。
BitBlt 用于从原设备中复制位图到目标设备,语法格式如下:
BOOLBitBlt(int x,int y,int nWidth,int nHeight,CDC*pSrcDC,int xSrc,int ySrc,DWORDdwRop);
x:目标矩形区域的左上角x轴坐标点。
y:目标矩形区域的左上角y轴坐标点。
nWidth:在目标设备中绘制位图的宽度。
nHight:在目标设备中绘制位图的高度。
pSrcDC:源设备上下文对象指针。
xSrc:源设备上下文的起点x轴坐标,函数从该起点复制位图到目标设备。
ySrc:源设备上下文的起点y轴坐标,函数从该起点复制位图到目标设备。
dwRop:光栅操作代码
dwRop有如下选择:
BLACKNESS 使用黑色填充目标区域
DSTINVERT 目标矩阵区域颜色取反
MERGECOPY 使用与运算组合原设备矩形区域的颜色和目标设备的画刷
MERGEPAINT 使用或运算将反向的源矩形区域的颜色和目标矩形区域的颜色合并
NOTSRCCOPY 复制源设备区域的反色到目标设备中
NOTSRCERASE 使用或运算组合源设备区域与目标设备区域的颜色,然后对结果颜色取反
PATCOPY 复制源设备当前选中的画刷到目标设备
PATINVERT 使用异或运算组合目标设备选中的画刷和目标设备区域的颜色
PATPAINT 通过或运算组合目标区域当前选中的画刷和源设备区域反转的颜色
SRCAND 使用与运算组合源设备和目标设备区域的颜色
SRCCOPY 直接复制源设备区域到目标设备中
SRCERASE 使用与运算组合目标设备区域的反色与源设备区域的颜色
SRCINVERT 使用异或运算组合源设备区域颜色和目标设备区域颜色
SRCPAINT 使用或运算组合源设备区域颜色和目标设备区域颜色
WHITENESS 使用白色填充目标区域
StretchBlt与BitBlt不同在于StretchBlt方法能够延伸或收缩位图以适应目标区域的大小。格式如下:BOOLStrevhBlt(int x,int y,int nWidth,int nHeight,CDC* pSrcDC,int xSrc,int ySrc,intnSrcWidth,int nSrcHeight,DWORD dwRop);
x:目标矩形区域的左上角x轴坐标点。
y:目标矩形区域的左上角y轴坐标点。
nWidth:在目标设备中绘制位图的宽度。
nHight:在目标设备中绘制位图的高度。
pSrcDC:源设备上下文对象指针。
xSrc:源设备上下文的起点x轴坐标,函数从该起点复制位图到目标设备。
ySrc:源设备上下文的起点y轴坐标,函数从该起点复制位图到目标设备。
nSrcWidth;需要复制的位图宽度。
nSrcHeight;需要复制的位图高度。
dwRop:光栅操作代码。
下面是两种方法对比程序,程序代码如下:
void CoutoutBmpView::OnDraw(CDC* pDC)
{
COutputBmpDoc* pDoc =GetDocument();//获取文档对象
ASSERT_VALID(pDoc);//验证文档对象
CDC memDC;//定义一个设备上下文
memDC.CreateCompatibleDC(pDC);//创建兼容的设备上下文
CBitmap bmp;//定义位图对象
bmp.LoadBitmap(IDB_BKBITMAP);//加载位图
memDC.SelectObject(&bmp);//选中位图对象
pDC->BitBlt(30,20,180,180,&memDC,1,1,SRCCOPY);//绘制位图
//以上是利用BitBlt来绘制位图
CRect rc(30,20,210,200);//定义一个区域
CBrush brush(RGB(0,0,0));//定义一个黑色的画刷
pDC->FrameRect(rc,&brush);//绘制矩形边框
//只是用来观察两者区别的,绘制一个矩形框
rc.OffsetRect(220,0);//移动区域
//下边是利用StretchBlt绘制的位图
BITMAP BitInfo;//定义位图结构
bmp.GetBitmap(&BitInfo);//获取位图信息
int x = BitInfo.bmWidth;//获取位图宽度
int y = BitInfo.bmHeight;获取位图高度
pDC->StretchBlt(rc.left,rc.top,rc.Width(),rc.Height(),&memDC,0,0,x,y,SRCCOPY);//绘制位图
pDC->FrameRect(rc,&brush);//绘制边框
brush.DeleteObject();//释放画刷
memDC.DeleteDC();//释放设备上下文
bmp.DeleteObject();//释放位图对象
}
【MFC】CDC::BitBlt介绍的更多相关文章
- CDC类介绍
CDC类 中文介绍 CDC类定义的是设备上下文对象的类. CDC对象提供处理显示器或打印机等设备上下文的成员函数,以及处理与窗口客户区对应的显示上下文的成员. 通过CDC对象的成员函数进行所有的绘图. ...
- BitBlt介绍
设备上下文画图有非常多种方法.比如通过创建位图画刷,利用其填充一个区域来实现图像的绘制.此外,还能够使用CDC类的位图函数来输出位图到设备上下文中. BitBlt 用于从原设备中复制位图到目标设备,语 ...
- 【MFC】BitBlt详解
设备上下文绘图有很多种方法.例如通过创建位图画刷,利用其填充一个区域来实现图像的绘制.此外,还可以使用CDC类的位图函数来输出位图到设备上下文中. BitBlt 用于从原设备中复制位图到目标设备,语法 ...
- MFC——CDC
CDC类定义的是设备上下文对象的类,有称设备环境对象类. Windows使用与设备无关的图形设备环境(DC:Device Context)进行显示. 说到CDC类就不能不提一下GdiObject——图 ...
- C++MFC编程笔记day01 MFC介绍、创建MFC程序和重写消息处理
一.MFC概念和作用 1.全称Microsoft Foundation Class Library,我们称为微软基础类库,封闭了绝大部分的win32 Api函数,C++语法中的数据结构,程序的运行流程 ...
- MFC开发--截图工具
近期学习了MFC的相关知识,MFC(Microsoft Foundation Classes)是微软公司提供的一个类库,可以这样简单理解,就是对于Win32的封装(MFC对windows API函数的 ...
- 图像处理程序框架—MFC相关知识点
CDC:Windows使用与设备无关的图形设备环境(DC :Device Context) 进行显示 . MFC基础类库定义了设备环境对象类----CDC类. CDC与CGdiObject的关系 说道 ...
- Win32 DLL和MFC DLL 中封装对话框
现在最常看见的关于DLL的问题就是如何在DLL中使用对话框,这是一个很普遍的关于如何在DLL中使用资源的问题.这里我们从Win32 DLL和MFC DLL两个方面来分析并解决这个问题. ...
- 第八章CDC设备
8.1 CDC设备介绍 USB的CDC类是USB通信设备类(Communication Device Class)的简称.CDC类是USB组织定义的一类专门给各种通信设备(电信通信设备和中速网络通信设 ...
随机推荐
- CodeForces - 986A Fair (BFS+贪心)
题意:有N个点M条边的无向图,每个点有给定的ai(1<=ai<=K,K<=200)表示该点拥有的物品编号,保证1-K在N个点全部出现.求每个点收集S个不同的物品所要走过的最短路程(边 ...
- javascript DOM dindow.docunment对象
一.找到元素: docunment.getElementById("id"):根据id找,最多找一个: var a =docunment.getElementById(&qu ...
- Flume1.7.0概述
Flume概述 常见的开源数据收集系统有: 非结构数据(日志)收集 Flume 结构化数据收集(传统数据库与 Hadoop 同步) Sqoop:全量导入 Canal(alibaba):增量导入 Dat ...
- $微信小程序开发实践点滴——接入Bmob后端云
Bmob后端云官网:http://www.bmob.cn/ 微信公众平台官网:https://mp.weixin.qq.com/ 微信小程序官方开发文档:https://mp.weixin.qq.co ...
- Python学习笔记之Python的enumerate函数
Python 的 enumerate() 函数就像是一个神秘的黑箱,你无法简单地用一句话来概括这个函数的作用与用法. enumerate() 函数属于非常有用的高级用法,而对于这一点,很多初学者甚至中 ...
- Python面试题之集合推导式、字典推导式
集合推导式 集合推导式(set comprehensions)跟列表推导式也是类似的, 唯一的区别在于它们使用大括号{}表示. Code: sets = {x for x in range(10)} ...
- how to get a controller instance in another controller
https://stackoverflow.com/questions/16870413/how-to-call-another-controller-action-from-a-controller ...
- [POI2009]Lyz
Description 初始时滑冰俱乐部有1到n号的溜冰鞋各k双.已知x号脚的人可以穿x到x+d的溜冰鞋. 有m次操作,每次包含两个数ri,xi代表来了xi个ri号脚的人.xi为负,则代表走了这么多人 ...
- GCD汇总
//总结如下: //1.同步请求:不会开启新的线程 //1-1.同步请求--串行队列:不开启新线程--按照顺序执行下去 //1-2.同步请求--并发列队:不开启新线程--按照顺序执行下去 //2.异步 ...
- mysql——jdbc驱动下载&连接mysql例子
mysql-connector-java-5.1.46.zip[解压后里面jar文件就是所需要的] https://dev.mysql.com/get/Downloads/Connector-J/my ...