您的位置:首页 > 其它

用Windows GDI 绘图时设置透明色

2008-12-31 12:10 267 查看
void DrawTransparent(int x,int y,CDC *pDC,CBitmap *pBitmap,COLORREF Color,CRect* rect)

{

BITMAP bm;

pBitmap->GetObject(sizeof(BITMAP),&bm);

  CDC ImageDC;

ImageDC.CreateCompatibleDC(pDC);

CBitmap *pOldImageBitmap=ImageDC.SelectObject(pBitmap);

CDC MaskDC;

MaskDC.CreateCompatibleDC(pDC);

CBitmap MaskBitmap;

MaskBitmap.CreateBitmap(bm.bmWidth,bm.bmHeight,1,1,NULL);

CBitmap *pOldMaskBitmap=MaskDC.SelectObject(&MaskBitmap);

ImageDC.SetBkColor(Color);

MaskDC.BitBlt(0,0,bm.bmWidth,bm.bmHeight,&ImageDC,0,0,SRCCOPY);

CDC OrDC;

OrDC.CreateCompatibleDC(pDC);

CBitmap OrBitmap;

OrBitmap.CreateCompatibleBitmap(&ImageDC,bm.bmWidth,bm.bmHeight);

CBitmap *pOldOrBitmap=OrDC.SelectObject(&OrBitmap);

OrDC.BitBlt(0,0,bm.bmWidth,bm.bmHeight,&ImageDC,0,0,SRCCOPY);

OrDC.BitBlt(0,0,bm.bmWidth,bm.bmHeight,&MaskDC,0,0,0x220326);

CDC TempDC;

TempDC.CreateCompatibleDC(pDC);

CBitmap TempBitmap;

TempBitmap.CreateCompatibleBitmap(&ImageDC,bm.bmWidth,bm.bmHeight);

CBitmap *pOldTmepBitmap=TempDC.SelectObject(&TempBitmap);

TempDC.BitBlt(0,0,bm.bmWidth,bm.bmHeight,pDC,x,y,SRCCOPY);

TempDC.BitBlt(0,0,bm.bmWidth,bm.bmHeight,&MaskDC,0,0,SRCAND);

TempDC.BitBlt(0,0,bm.bmWidth,bm.bmHeight,&OrDC,0,0,SRCPAINT);

if (rect!=NULL)

  pDC->BitBlt(x,y,rect->Width(),rect->Height(),&TempDC,rect->left,rect->top,SRCCOPY);

    else

pDC->BitBlt(x,y,bm.bmWidth,bm.bmHeight,&TempDC,0,0,SRCCOPY);

    TempDC.SelectObject(pOldTmepBitmap);

OrDC.SelectObject(pOldOrBitmap);

MaskDC.SelectObject(pOldMaskBitmap);

ImageDC.SelectObject(pOldImageBitmap);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: