zoukankan      html  css  js  c++  java
  • 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();//释放位图对象

    }


  • 相关阅读:
    ls命令具有一个r选项,可以递归的列出子目录中的内容。请编写一个具有同样功能的程序。
    BizTalk Server 2006 正式发布了,有120天试用版可以下载 无为而为
    IT人看《国富论》系列:第一篇之第四章:论货币的起源及其效用。UML是软件行业的货币 无为而为
    使用XPathNavigator和XPathExpression求出XPath的值,[源代码] 无为而为
    为XPath自定义函数(因为XPath1.0的函数非常有限)[附源代码下载] 无为而为
    IT人看《国富论》系列:第一篇之第二章:论分工的原由。分工其实是人类利己倾向的结果 无为而为
    非常令人沮丧的是,SQL 2005 发布的 Web EndPoint不支持匿名访问 无为而为
    Team Foundation Server Workgroup Edition 5 用户限制到底是如何限制的呢? 无为而为
    微软发布新的MSN ToolBar V2.5,包含桌面搜索,Outlook搜索,支持IE的选项卡浏览模式 无为而为
    IT人看《国富论》系列:第一篇之第三章:论分工受市场范围的限制。外国人都觊觎的中国市场到底大还是不大? 无为而为
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/3802865.html
Copyright © 2011-2022 走看看