Bitblt单色位图SetBkColor、SetTextColor作用

来源:互联网 发布:交换机mac地址 h3c 编辑:程序博客网 时间:2024/04/28 07:31

由于文章中图片比较多,我不会在论坛上发,就只有把Word文档转了图片传上来,如果有需要可以索取电子文档。

邮件地址suolao_wk@163.com

 

Doc1

 

 

doc2

 

 

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);

}

原创粉丝点击