您的位置:首页 > 其它

Bitblt单色位图SetBkColor、SetTextColor作用

2015-04-24 09:38 447 查看




void CGameDIB::TransparentBlt(HDC hdcDest,
int iDestX, int iDestY, int iDestWidth, int iDestHeight,
HDC hdcSource, int iSourceX,
int iSourceY, int iSourceWidth, int iSourceHeight,UINT Tcol)
{
// 1. 建立图形资源
HBITMAP hbitmapMem = ::CreateCompatibleBitmap(hdcDest, iDestWidth, iDestHeight);
HBITMAP hbitmapMask = ::CreateBitmap(iDestWidth, iDestHeight,
1, 1, NULL); // 创建单色掩码位图
HDC hDCMem = ::CreateCompatibleDC(hdcDest);
HDC hdcMask = ::CreateCompatibleDC(hdcDest);
HBITMAP oldBMPMem = (HBITMAP)::SelectObject(hDCMem, hbitmapMem);
HBITMAP oldBMPMask = (HBITMAP)::SelectObject(hdcMask, hbitmapMask);

// 2. 拷贝或压缩拷贝源DC中的位图到内存DC中
if (iSourceWidth == iDestWidth && iSourceHeight == iDestHeight)
::BitBlt(hDCMem, 0, 0, iDestWidth, iDestHeight, hdcSource, iSourceX, iSourceY, SRCCOPY);
else
::StretchBlt(hDCMem, 0, 0, iDestWidth, iDestHeight, hdcSource, iSourceX, iSourceY, iSourceWidth,iSourceHeight, SRCCOPY);

// 3.生成掩码位图
::SetBkColor(hDCMem, Tcol); // 设置掩码图中白色的对应RGB,若无则生成全黑。
::BitBlt(hdcMask, 0, 0, iDestWidth, iDestHeight, hDCMem,
0, 0, SRCCOPY); // 生成掩码位图
::SetBkColor( hDCMem, RGB(0,
0, 0) );
::SetTextColor(hDCMem, RGB(255,
255, 255) );
::BitBlt(hDCMem, 0, 0, iDestWidth, iDestHeight, hdcMask,
0, 0, SRCAND); // 黑色背景的人物

// 4.透明显示
::SetBkColor(hdcDest, RGB(255,
255, 255) );
::SetTextColor(hdcDest, RGB(0,
0, 0) );
::BitBlt(hdcDest, iDestX, iDestY, iDestWidth, iDestHeight, hdcMask,
0, 0, SRCAND); // 生成掩码洞
::BitBlt(hdcDest, iDestX, iDestY, iDestWidth, iDestHeight, hDCMem,
0, 0, SRCPAINT); // 透明效果

// 5.释放图形资源
::SelectObject(hDCMem, oldBMPMem);
::DeleteDC(hDCMem);
::DeleteObject(hbitmapMem);
::SelectObject(hdcMask, oldBMPMask);
::DeleteDC(hdcMask);
::DeleteObject(hbitmapMask);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: