BitBlt介绍

BitBlt介绍

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

设备上下文画图有非常多种方法。比如通过创建位图画刷,利用其填充一个区域来实现图像的绘制。此外,还能够使用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://javaforall.net/118347.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 将Excel转换为word_excel如何将横排变成竖排

    将Excel转换为word_excel如何将横排变成竖排本次转换用到了NPOI里面的方法,会经过封装成为dll,在.net平台和unity都测试通过。下面主要讲一下思路:1.将表格读取为DataTable类型2.z

    2022年8月22日
    3
  • html div 隐藏滚动条样式,div滚动条样式隐藏与显示

    html div 隐藏滚动条样式,div滚动条样式隐藏与显示DIV滚动条样式是可以设置的,CSS滚动条同样也可以显示与隐藏,对div设置滚动条,设置其横向滚动条和纵向滚动条样式应该怎么做呢?要设置CSS滚动条样式,需要用到overflow-y和overflow-x来设置div盒子对象右侧和底部滚动条效果。同时也可以使用CSS样式设置html框架iframe的滚动条隐藏,接下来为大家介绍。常规overflow怎么设置overflow-y:scroll总是显…

    2022年7月12日
    33
  • ajax html例子,AJAX实例[通俗易懂]

    ajax html例子,AJAX实例[通俗易懂]AJAX实例实例一:一个简单的AJAX实例创建一个简单的XMLHttpRequest,从一个TXT文件中返回数据实例functionloadXMLDoc(){varxmlhttp;if(window.XMLHttpRequest){//IE7+,Firefox,Chrome,Opera,Safari浏览器执行代码xmlhttp=newXMLHttpRequest();}els…

    2022年8月16日
    8
  • STM32F103+RFID-RC522模块 实现简单读卡写卡demo「建议收藏」

    目录前言代码下载:功能介绍:接线STM32STM32F1开发指南(精英版)-库函数版本_V1.2STM32中文参考手册RFID-RC522RFID射频模块电路原理图使用图+效果图一、先用手机软件NFCWriter读取空卡看看内容1、打开软件和NFC(ps:我的手机是小米10)2、将空卡贴于手机背部,弹出提示发现新卡,点击“好的”3、上面的新卡片左滑到新卡片1,单击这个卡片4、进入卡片信息详细页面钥匙扣卡M1空白卡二、编译、烧写程序三、将钥匙扣卡发在模块上,打开串口,开始测试核心代码main.crc522.

    2022年4月7日
    62
  • Gitblit服务器搭建

    Gitblit服务器搭建Gitblit服务器搭建

    2022年4月23日
    43
  • C++之内核对象进行线程同步

    用户模式下的线程同步机制提供了非常好的性能,但他们也的确存在一些局限性,而且不适用于许多应用程序,例如,对Interlocked系列函数只能对一个值进行操作,它们从来不会把线程切换到等待状态。我们可以

    2021年12月19日
    42

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号