松鼠的博客

导航

统计

BitBlt位图函数详解

MSDN地址:http://msdn.microsoft.com/en-us/library/dd183370(VS.85).aspx

 

函数功能:

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

 

函数原型:

复制代码
BOOL BitBlt(
    HDC hdcDest, 
    
int nXDest, 
    
int nYDest, 
    
int nWidth, 
    
int nHeight, 
    HDC hdcSrc, 
    
int nXSrc, 
    
int nYSrc, 
    DWORD dwROP
);
复制代码

 

参数:

thdcDest

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

nXDest

指定目标矩形区域克上角的X轴逻辑坐标。

nYDest

指定目标矩形区域左上角的Y轴逻辑坐标。

nWidth

指定源和目标矩形区域的逻辑宽度。

nHeight

指定源和目标矩形区域的逻辑高度。

hdcSrc

指向源设备环境句柄。

nXSrc

指定源矩形区域左上角的X轴逻辑坐标。

nYSrc

指定源矩形区域左上角的Y轴逻辑坐标。

dwRop

指定光栅操作代码。这些代码将定义源矩形区域的颜色数据,如何与目标矩形区域的颜色数据组合以完成最后的颜色。

下面列出了一些常见的光栅操作代码:

描述

BLACKNESS

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

DSTINVERT

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

MERGECOPY

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

MERGEPAINT

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

NOTSRCCOPY

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

NOTSRCERASE

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

PATCOPY

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

PATPAINT

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

PATINVERT

通过使用XOR(异或)操作符将目标矩形区域内的颜色与特定模式的颜色合并。

SRCAND

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

SRCCOPY

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

SRCERASE

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

SRCCINVERT

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

SRCPAINT

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

WHITENESS

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

返回值:

如果函数成功,那么返回值非零;如果函数失败,则返回值为零。

Windows NT:若想获取更多的错误信息,请调用GetLastError函数。

 

备注:如果在源设备中可以实行旋转或剪切变换,那么函数数BitBlt返回一个错误。如果存在其他变换(并且目标设备环境中匹配变换无效),那么目标设备环境中的区域将在需要时进行拉伸、压缩或旋转。

如果源和目标设备环境的颜色格式不匹配,那么BitBlt函数将源场景的颜色格式转换成能与目标格式匹配的格式。当正在记录一个增强型图元文件时,如果源设备环境标识为一个增强型图元文件设备环境,那么会出现错误。如果源和目标设备环境代表不同的设备,那么BitBlt函数返回错误。

Windows CE:在Windows CE 1.0版中,参数dwRop只可以指定为下列值:SRCCOPYSRCANDSRCPAINTSRCINVERT。在Windows CE 2.0版中,参数dwRop可以是任何油印机操作代码值。

 

速查:Windows NT3.1及以上版本;Windows95及以上版本;Windows CE1.0及以上版本;头文件:Wingdi.h;库文件:gdi32.lib

 

示例:

复制代码
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, 
00, bm.bmWidth, bm.bmHeight, hdcSrc, 00, SRCCOPY);
    SelectObject(hdcSrc, hbmOld);
    DeleteDC(hdcSrc);
    DeleteDC(hdcDst);
    
return hbmNew;
}
复制代码

posted on   Xproer-松鼠  阅读(868)  评论(0编辑  收藏  举报

编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示