BitBlt函数解析

一、BitBlt函数的作用:

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


二、BitBlt 函数原型:


bool BitBlt (

HDC hdcDest, //指向目标设备环境的句柄

int    nXDest, //指定目标矩形区域坐上角的X轴逻辑坐标

int    nYDest, //指定目标矩形区域左上角的Y轴逻辑坐标

int  nWidth, //指定源和目标矩形区域的逻辑宽度

int     nHeight, //指定源和目标矩形区域的逻辑高度

HDC hdcSrc, //指向源设备环境的句柄

int   nXSrc, /指定源矩形区域左上角的X轴逻辑坐标

int   nYSrc, //指定源矩形区域左上角的Y轴逻辑坐标

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

);


三、常用的光栅操作码的含义:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


四、功能相似的函数:

1.StretchBlt:函数从源矩形中复制一个位图到目标矩形,必要时按目前设备设置的模式进行图像的拉伸或压缩。


原型如下:

BOOL StretchBlt (

HDC hdcDest, //指向目标设备环境的句柄。

int nXOriginDest, //指定目标矩形左上角的X轴坐标,按逻辑单位表示坐标。 

  intnYOriginDest, //指定目标矩形左上角的Y轴坐标,按逻辑单位表示坐标。 

  int nWidthDest, //指定目标矩形的宽度,按逻辑单位表示宽度。 

int nHeightDest, //指定目标矩形的高度,按逻辑单位表示高度。 

HDC hdcSrc, //指向源设备环境的句柄。 

int nXOriginSrc, //指向源矩形区域左上角的X轴坐标,按逻辑单位表示坐标。 

int nYOriginSrc,  //指向源矩形区域左上角的Y轴坐标,按逻辑单位表示坐标。 

int nWidthSrc, //指定源矩形的宽度,按逻辑单位表示宽度。 

int HeightSrc,//指定源矩形的高度,按逻辑单位表示高度。 

DWORD dwRop /指定要进行的光栅操作。

);


2.TransparentBlt:该函数对指定的源设备环境中的矩形区域像素的颜色数据进行位块(bit_block)转换,并将结果置于目标设备环境。


函数原型如下:

BOOL TransparentBlt(
  _In_  HDC hdcDest,
   _In_  int xoriginDest,
 _In_  int yoriginDest,
 _In_  int wDest,
  _In_  int hDest,
  _In_  HDC hdcSrc,
  _In_  int xoriginSrc,
  _In_  int yoriginSrc,
  _In_  int wSrc,
  _In_  int hSrc,
  _In_  UINT crTransparent//RGB颜色在源位图被视为透明(以上其他同StretchBlt )。
);


五、BitBlt、StretchBlt 、TransparentBlt的区别:

BitBlt直接按你指定的大小输出源dc到目标dc,而StretchBlt 会调整你源dc大小,使之适应你所指定的目标dc大小,再输出。StretchBlt 输出的图总是能够充填满你指定的目标DC区域,而BitBlt输出的图无法布满目标dc制定区域。TransparentBlt和StretchBlt 相似也可以缩放,但他可以指定透明色。


  • 1
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MFC中的`BitBlt`函数是用于位图的显示和复制的函数。它的原型如下: ```cpp BOOL BitBlt( HDC hdcDest, // 目标DC的句柄 int nXDest, // 目标矩形左上角的x坐标 int nYDest, // 目标矩形左上角的y坐标 int nWidth, // 目标矩形的宽度 int nHeight, // 目标矩形的高度 HDC hdcSrc, // 源DC的句柄 int nXSrc, // 源矩形左上角的x坐标 int nYSrc, // 源矩形左上角的y坐标 DWORD dwRop // 光栅操作代码 ); ``` 其中,`hdcDest`和`hdcSrc`分别是目标DC和源DC的句柄,`nXDest`、`nYDest`、`nWidth`和`nHeight`描述了目标矩形的位置和大小,`nXSrc`和`nYSrc`描述了源矩形的位置,`dwRop`是光栅操作代码,控制复制操作的行为。 下面是一个简单的示例代码,演示了如何使用`BitBlt`函数复制一个位图: ```cpp CBitmap bmp; CDC dcMem; CRect rect; // 加载位图 bmp.LoadBitmap(IDB_BITMAP1); // 获取位图大小 bmp.GetBitmap(&bm); // 获取目标DC CClientDC dc(this); // 创建源DC dcMem.CreateCompatibleDC(&dc); // 选择位图到源DC中 CBitmap* pOldBitmap = dcMem.SelectObject(&bmp); // 获取目标区域 GetClientRect(&rect); // 复制位图到目标DC中 dc.BitBlt(0, 0, bm.bmWidth, bm.bmHeight, &dcMem, 0, 0, SRCCOPY); // 清理资源 dcMem.SelectObject(pOldBitmap); bmp.DeleteObject(); dcMem.DeleteDC(); ``` 在这个示例中,我们首先加载了一个位图,并获取了它的大小。然后,我们获取了目标DC,并创建了一个与之兼容的源DC。接着,我们选择位图到源DC中,并使用`BitBlt`函数位图复制到目标DC中。最后,我们清理了资源。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值