博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BitBlt介绍
阅读量:5073 次
发布时间:2019-06-12

本文共 2203 字,大约阅读时间需要 7 分钟。

该设备上下文绘制非常多的方法。例如,通过创建一个位水墨画,使用它来填充的区域,实现了绘制图像。而且,也可以用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();//发行位图对象

}

转载于:https://www.cnblogs.com/gcczhongduan/p/4563531.html

你可能感兴趣的文章
erlang lists模块函数使用大全
查看>>
加密算法-RSA
查看>>
SharePoint 2010 Ribbon with wrong style in Chrome and Safari
查看>>
Archlinux 踩坑实录
查看>>
路由器 NorFlash与NandFlash区别
查看>>
iptables/Netfilter 学习
查看>>
正则表达式之Regex.Matches()用法
查看>>
车载行业认证资质
查看>>
[leetcode] 16. 最接近的三数之和
查看>>
设计模式概要
查看>>
spring接收参数
查看>>
IIS状态监测(如果状态错误则重启IIS)
查看>>
从Discuz!NT项目文件结构看如何给系统框架分层和类库分文件夹
查看>>
22、Java并发性和多线程-Java中的读/写锁
查看>>
HDOJ 1250 Hat's Fibonacci 简单解题报告
查看>>
mvc5 + ef6 + autofac搭建项目(repository+uow)(二)
查看>>
uploadify在chrome下初始化失败,在Firefox下却可以原因探析
查看>>
HDU 2879 数论
查看>>
LA和TA
查看>>
spark性能调优之一:分配更多资源
查看>>