创建透明位图的方法

来源:互联网 发布:mac照片程序打不开 编辑:程序博客网 时间:2024/04/30 09:48
在做界面开发的时候经常需要去创建透明的位图,由于MFC没有封装这样的函数,经过多方查找资料和试验,终于写出了一个可以创建透明位图的函数,下面给大家分享一下。




void BitTrans(
int nXDest, // 目标起点X
        int nYDest, // 目标起点Y
        int nWidthDest, // 目标宽度
        int nHeightDest,// 目标高度
CDC* pDC, // 目标DC
        int nXSrc, // 来源起点X
        int nYSrc, // 来源起点Y
        COLORREF crTrans// 透明色
        )
{
CMemDC dcImage(nWidthDest, nHeightDest,pDC);//临时DC
CBitmap bmpMask;
bmpMask.CreateBitmap(nWidthDest, nHeightDest, 1, 1, NULL);            // 创建单色掩码位图
CDC dcMask;//掩码DC 
dcMask.CreateCompatibleDC(pDC);
dcMask.SelectObject(bmpMask);
//将载入位图的内存DC中的位图,拷贝到临时DC中
dcImage.BitBlt( 0, 0, nWidthDest, nHeightDest, this, nXSrc, nYSrc, SRCCOPY);

// 设置临时DC的透明色
dcImage.SetBkColor(crTrans);
//掩码DC的透明区域为白色其他区域为黑色
dcMask.BitBlt(0, 0, nWidthDest, nHeightDest, &dcImage, 0, 0, SRCCOPY);

//临时DC透明区域为黑色,其他区域保持不变
dcImage.SetBkColor(RGB(0,0,0));
dcImage.SetTextColor(RGB(255,255,255));
dcImage.BitBlt( 0, 0, nWidthDest, nHeightDest, &dcMask, 0, 0, SRCAND);

// 目标DC透明部分保持屏幕不变,其他部分变成黑色
pDC ->SetBkColor(RGB(255,255,255));
pDC ->SetTextColor(RGB(0,0,0));
pDC ->BitBlt(nXDest, nYDest, nWidthDest, nHeightDest, &dcMask, 0, 0, SRCAND);
pDC ->BitBlt(nXDest, nYDest, nWidthDest, nHeightDest, &dcImage, 0, 0, SRCPAINT);


0 0
原创粉丝点击