精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>C/C++>>图形图像及多媒体专题>>一个可以绘制透明图象的函数

主题:一个可以绘制透明图象的函数
发信人: skyice()
整理人: wenbobo(2002-12-27 15:53:04), 站内信件
void DrawTransparentBitmap(CDC * pDC,int x,int y,
                           UINT id,COLORREF crColor)
// x,y 是要显示的图象的位置,id 是要显示的位图资源的ID
// crColor 是要显示位图的背景色
{
    COLORREF crOldBack=pDC->SetBkColor(RGB(255,255,255));
    COLORREF crOldText=pDC->SetTextColor(RGB(0,0,0));

    CDC dcImage,dcMask;
    CBitmap bmp;
    BITMAP bm;

    bmp.LoadBitmap(id);
    bmp.GetBitmap(&bm);

    int nWidth=bm.bmWidth,nHeight=bm.bmHeight;

    dcImage.CreateCompatibleDC(pDC);
    dcMask.CreateCompatibleDC(pDC);

    CBitmap * pOldBitmapImage=dcImage.SelectObject(&bmp);
    CBitmap bitmapMask;
    bitmapMask.CreateBitmap(nWidth,nHeight,1,1,NULL);
    CBitmap * pOldBitmapMask=dcMask.SelectObject(&bitmapMask);
    dcImage.SetBkColor(crColor);
    dcMask.BitBlt(0,0,nWidth,nHeight,&dcImage,0,0,SRCCOPY);
    pDC->BitBlt(x,y,nWidth,nHeight,&dcImage,0,0,SRCINVERT);
    pDC->BitBlt(x,y,nWidth,nHeight,&dcMask,0,0,SRCAND);
    pDC->BitBlt(x,y,nWidth,nHeight,&dcImage,0,0,SRCINVERT);
    dcImage.SelectObject(pOldBitmapImage);
    dcMask.SelectObject(pOldBitmapMask);
    pDC->SetBkColor(crOldBack);
    pDC->SetTextColor(crOldText);
}


--
欢迎您到C语言版来!

※ 修改:.skyice 于 Jan 23 19:51:03 修改本文.[FROM: 202.99.75.247]
※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.99.75.247]

[关闭][返回]