zoukankan      html  css  js  c++  java
  • 【Visual C++】绘图函数BitBlt的使用方法

     

     

    BitBlt

    该函数对指定的源设备环境区域中的像素进行位块(bit_block)转换,以传送到目标设备环境。

    原型:   

    BOOL BitBlt(

        HDC  hdcDest,

        int  nXDest,  int  nYDest,  int  nWidth,  int  nHeight,

        HDC  hdcSrc,

        int  nXSrc,  int  nYSrc,

        DWORD  dwRop);

    参数:    

    hdcDest:指向目标设备环境的句柄。

    nXDest、nYDest:指定目标矩形区域左上角的X轴和Y轴逻辑坐标

    nWidth、nHeight:指定源和目标矩形区域的逻辑宽度和逻辑高度。

    hdcSrc:指向源设备环境的句柄。

    nXSrc、nYSrc:指定源矩形区域左上角的X轴和Y轴逻辑坐标。

    dwRop:指定光栅操作代码。这些代码将定义源矩形区域的颜色数据,如何与目标矩形区域的颜色数据组合以完成最后的颜色。下面列出了一些常见的光栅操作代码:

     

    描述

    BLACKNESS

    表示使用与物理调色板的索引0相关的色彩来填充目标矩形区域,(对缺省的物理调色板而言,该颜色为黑色)。

    DSTINVERT

    表示使目标矩形区域颜色取反。

    MERGECOPY 

    表示使用布尔型AND(与)操作符将源矩形区域的颜色与特定模式组合一起。

    MERGEPAINT

    通过使用布尔型OR(或)操作符将源矩形区域的颜色取反后与目标矩形区域的颜色合并。

    NOTSRCCOPY

    将源矩形区域颜色取反,拷贝到目标矩形区域。

    NOTSRCERASE

    使用布尔类型的OR(或)操作符组合源和目标矩形区域的颜色值,然后将合成的颜色取反。

    PATCOPY

    将特定的模式拷贝到目标位图上。

    PATINVERT

    通过使用布尔型XOR(异或)操作符将源和目标矩形区域内的颜色合并。

    PATPAINT

    通过使用布尔型OR(或)操作符将源矩形区域取反后的颜色值与特定模式的颜色合并。然后使用OR(或)操作符将该操作的结果与目标矩形区域内的颜色合并。

    SRCAND

    通过使用布尔型AND(与)操作符来将源和目标矩形区域内的颜色合并。

    SRCCOPY

    将源矩形区域直接拷贝到目标矩形区域。

    SRCERASE

    通过使用布尔型AND(与)操作符将目标矩形区域颜色取反后与源矩形区域的颜色值合并。

    SRCINVERT

    通过使用布尔型XOR(异或)操作符将源和目标矩形区域的颜色合并。

    SRCPAINT

    通过使用布尔型OR(或)操作符将源和目标矩形区域的颜色合并。

    WHITENESS

    使用与物理调色板中索引1有关的颜色填充目标矩形区域。(对于缺省物理调色板来说,这个颜色就是白色)。

     

      完整的光栅操作(ROP)码,参见 Ternary Raster Operations.

     

    返回值:

       如果函数成功,那么返回值非零;如果函数失败,则返回值为零。调用GetLastError函数获取扩展错误信息。

    说明:

       如果在源设备环境中可以实行旋转或剪切变换,那么函数BitBlt返回一个错误。

       如果存在其他变换(并且目标设备环境中匹配变换无效),那么目标设备环境中的矩形区域将在需要时进行拉伸、压缩或旋转。

       如果源和目标设备环境的颜色格式不匹配,那么BitBlt函数将源场景的颜色格式转换成能与目标格式匹配的格式。

       当正在记录一个增强型图元文件时,如果源设备环境标识为一个增强型图元文件设备环境,那么会出现错误。

       并不是所有的设备都支持BitBlt函数。更多信息,调用GetDeviceCaps 函数,将第二个参数赋值为RC_BITBLT来查看设备是否支持。(For more information, see the RC_BITBLT raster capability entry in the GetDeviceCaps function, as well as the MaskBlt and StretchBlt functions. )

       如果源和目标设备环境代表不同的设备,那么BitBlt函数返回错误。

       更多关于从右到左向位块传输显示信息(For information about blitting to displays with right-to-left orientations),参见 Creating Bitmaps。 

       在Windows CE 1.0和1.01版中,参数dwRop只可以指定为下列值:SRCCOPY、SRCAND、SRCPAINT、SRCINVERT。在Windows CE 2.0及以后版中,参数dwRop可以是任何ROP3代码值。 

     

    下面是MSDN上的例子:

    HBITMAP CopyBitmap( HBITMAP hbm) {
        HDC hdcSrc = CreateCompatibleDC(NULL);
        HDC hdcDst = CreateCompatibleDC(NULL);
        HBITMAP hbmOld, hbmOld2, hbmNew;
        BITMAP bm;
        GetObject(hbm, sizeof(bm), &bm);
        hbmOld = SelectObject(hdcSrc, hbm);
        hbmNew = CreateBitmap( bm.bmWidth, bm.bmHeight, bm.bmPlanes,
            bm.bmBitsPixel,
            NULL);
        hbmOld2 = SelectObject(hdcDst, hbmNew);
        BitBlt(hdcDst, 0, 0, bm.bmWidth, bm.bmHeight, hdcSrc, 0, 0, SRCCOPY);
        SelectObject(hdcSrc, hbmOld);
        SelectObject(hdcDst, hbmOld2);
        DeleteDC(hdcSrc);
        DeleteDC(hdcDst);
        return hbmNew;
     
     
    本文章部分转自  http://blog.csdn.net/z0203153008/article/details/5937571
  • 相关阅读:
    Oracle 推出 ODAC for Entity Framework 和 LINQ to Entities Beta版
    Entity Framework Feature CTP 5系列文章
    MonoDroid相关资源
    MSDN杂志上的Windows Phone相关文章
    微软学Android Market推出 Web Windows Phone Marketplace
    使用 Visual Studio Agent 2010 进行负载压力测试的安装指南
    MonoMac 1.0正式发布
    Shawn Wildermuth的《Architecting WP7 》系列文章
    使用.NET Mobile API即51Degrees.mobi检测UserAgent
    MongoDB 客户端 MongoVue
  • 原文地址:https://www.cnblogs.com/dyllove98/p/2461860.html
Copyright © 2011-2022 走看看