BitBlt函数的用法和一个小实例

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             使用白色填充目标区域


示例代码片段:

HDC hdc,hdcbmp;
hdc=GetDC(hwnd);//获取设备上下文句柄
hdcbmp=CreateCompatibleDC(hdc);
//HBITMAP hBitmap=LoadImage(hInst, MAKEINTRESOURCE(IDB_BLACK), IMAGE_BITMAP, 0, 0, LR_DEFAULTSIZE | LR_SHARED);//这行代码可代替下面三行代码来加载图片,具体可见CBitmap,HBITMAP,Bitmap的区别
CBitmap bmp;//定义位图对象
bmp.LoadBitmap(IDB_BLACK);//加载位图
HBITMAP hBitmap=(HBITMAP)bmp.GetSafeHandle();//获取位图指针
SelectObject(hdcbmp,hBitmap);//选中位图对象
BitBlt(hdc, 0, 0, 40, 40, hdcbmp, 0, 0, SRCCOPY);

CBitmap,HBitmap,Bitmap区别及联系

参考博文:http://blog.csdn.net/ivan_ljf/article/details/8569130,并感谢原作者


【机器博弈中的用途】:把一枚棋子画在棋盘上

一.五子棋:直接用BitBlt函数把棋子覆盖到棋盘上

二.象棋

   (1) 把原来位置的棋子用棋盘图案覆盖掉 (BitBlt函数 );    (2) 在该位置贴上棋子的图案,由于棋子图案是透明的,所以要用 TransparentBlt函数;    (3) 如果这枚棋子是选中的,那么再在该位置贴上选中的图案 (再用一次 TransparentBlt函数 )

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值