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)
上一篇 2021年12月7日 下午12:00
下一篇 2021年12月7日 下午1:00


相关推荐

  • swing58_ML2437A

    swing58_ML2437A给定一个长度为 n 的整数序列,初始时序列为 {1,2,…,n−1,n}。序列中的位置从左到右依次标号为 1∼n。我们用 [l,r] 来表示从位置 l 到位置 r 之间(包括两端点)的所有数字构成的子序列。现在要对该序列进行 m 次操作,每次操作选定一个子序列 [l,r],并将该子序列中的所有数字进行翻转。例如,对于现有序列 1 3 2 4 6 5 7,如果某次操作选定翻转子序列为 [3,6],那么经过这次操作后序列变为 1 3 5 6 4 2 7。请你求出经过 m 次操作后的序列。输入格式第

    2022年8月9日
    6
  • pycharm设置作者和时间[通俗易懂]

    pycharm设置作者和时间[通俗易懂]pycharm设置作者和时间,每次新建代码时,字段在代码开头新增这几行内容。示例:#-*-coding:utf-8-*-#@Author:作者名#@Time:${DATE}${TIME}

    2022年8月27日
    9
  • 模电学习第一天–PN结梳理

    模电学习第一天–PN结梳理基本概念本征半导体:纯净的、具有晶体结构的半导体两种载流子:自由电子、空穴(两种载流子均参与导电)本征激发:半导体在热激发下产生自由电子和空穴对的现象复合:电子填补空穴动态平衡:一定温度下,本征激发与复合产生的自由电子和空穴相等温度影响:热运动加剧–挣脱共价键束缚自由电子增多–空穴增多–载流子浓度提高–导电能力增强N型半导体:自由电子浓度大于空穴浓度,前者为多子,后者为少子P型半导体:空穴浓度大于自由电子浓度对于杂质半导体的温度影响:可以认为多子浓度约等于所掺杂质原子的浓度,且受温度影响很

    2022年6月20日
    39
  • AbstractInterceptor 字符拦截 struts2

    AbstractInterceptor 字符拦截 struts2在输入框做了个字符拦截          ActionContextcontext=actionInvocation.getInvocationContext();  //getinputparameters  Mapmap=context.getParameters();  Iteratorit_values=map.values().iterato

    2022年5月14日
    42
  • 正确理解ThreadLocal[通俗易懂]

    正确理解ThreadLocal

    2022年2月1日
    50
  • 监控在服务器中的作用和功能,视频安防监控服务器能实现哪些功能以及解决哪些问题呢…

    监控在服务器中的作用和功能,视频安防监控服务器能实现哪些功能以及解决哪些问题呢…随着物联网的快速发展,视频安防监控服务器开发也在不断的进步,核心技术是进行视频监控服务器开发的重要基础。但由于要满足用户的各种各样的需求,还需要解决很多相关技术。那么视频安防监控服务器能实现哪些功能?解决哪些问题呢?下面就和小编一起来了解下吧。1、操作系统其实操作系统的开发是一个很困难的技术问题,列为核心技术绝不为过,但是正因为难度太大,仅仅为开发视频监控服务器而开发DM642上的操作系统代价太大…

    2022年6月28日
    28

发表回复

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

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