图片透明函数的实现MyTransparentBlt


bool MyTransparentBlt(HDC backDC,int x1,int y1,int w1,int h1,HDC foreDC,int x2,int y2,int w2,int h2,UINT TransColor)
{
 HDC maskDC = CreateCompatibleDC(0);  // '1.建立单色mask DC
    HBITMAP maskBitmap = CreateBitmap(w2, h2, 1, 1, 0);//建立与前景图大小相同的HBITMAP
    SelectObject( maskDC, maskBitmap);//maskBitmap选入maskDC
   
    SetBkColor( foreDC, TransColor); //'2.把前景图的背景色设为透明色
    BitBlt (maskDC, x1, y1, w1, h1, foreDC, x2, y2, SRCCOPY); //'3.copy前景图到单色DC得到mask

    SetBkColor( foreDC, RGB(0, 0, 0));//   '4.把前景图与mask图作与运算
    SetTextColor (foreDC, RGB(255, 255, 255));//设置前景图前景颜色为全1
    BitBlt (foreDC, x1, y1, w1, h1, maskDC, x2, y2, SRCAND);
   
    SetBkColor( backDC, RGB(255, 255, 255) );//  '5.把背景图与mask图作与运算
    SetTextColor (backDC, RGB(0, 0, 0));//设置背景图前景颜色为全0
    BitBlt( backDC, x1, y1, w1, h1, maskDC,  x2, y2, SRCAND);
   
    //'6.把前景图和背景图作或运算
    BitBlt( backDC,x1, y1, w1, h1, foreDC,  x2, y2, SRCPAINT);

 SelectObject(maskDC, maskBitmap);    
 DeleteDC(maskDC);
 
 DeleteObject(maskBitmap);
 
 return true;
}

bool MyTransparentBlt2(HDC backDC,int x1,int y1,int w1,int h1,HDC foreDC,int x2,int y2,int w2,int h2,UINT TransColor)
{
 HDC maskDC = CreateCompatibleDC(0);  // '1.建立单色mask DC
    HBITMAP maskBitmap = CreateBitmap(w2, h2, 1, 1, 0);//建立与前景图大小相同的HBITMAP
    SelectObject( maskDC, maskBitmap);//maskBitmap选入maskDC
 
 SetBkColor( foreDC, TransColor); //'2.把前景图的背景色设为透明色
   
    //StretchBlt  (maskDC, x1, y1, w1, h1, foreDC, x2, y2, w2,h2,SRCCOPY); //'3.copy前景图到单色DC得到mask
 if (w1==w2&&h1==h2)
  BitBlt(maskDC, x1, y1, w1, h1, foreDC, w2,h2,SRCCOPY);
 else
  StretchBlt(maskDC, x1, y1, w1, h1, foreDC, x2, y2, w2,h2,SRCCOPY);

    SetBkColor( foreDC, RGB(0, 0, 0));//   '4.把前景图与mask图作与运算
    SetTextColor (foreDC, RGB(255, 255, 255));//设置前景图前景颜色为全1
    BitBlt  (foreDC, x1, y1, w1, h1, maskDC,  w2,h2,SRCAND);
   
    SetBkColor( backDC, RGB(255, 255, 255) );//  '5.把背景图与mask图作与运算
    SetTextColor (backDC, RGB(0, 0, 0));//设置背景图前景颜色为全0
    BitBlt ( backDC, x1, y1, w1, h1, maskDC,  w2,h2,SRCAND);
   
    //'6.把前景图和背景图作或运算
    BitBlt ( backDC,x1, y1, w1, h1, foreDC, w2,h2, SRCPAINT);

 SelectObject(maskDC, maskBitmap);    
 DeleteDC(maskDC);
 
 DeleteObject(maskBitmap);
 
 return true;
}

BOOL CMFCtestDlg::OnEraseBkgnd(CDC* pDC)
{
 // TODO: Add your message handler code here and/or call default
 CDialog::OnEraseBkgnd(pDC);
 CDC cdc;
 cdc.CreateCompatibleDC(pDC);
 
 cdc.SelectObject(&cbmp1);

 BITMAP bmp;
 cbmp2.GetBitmap(&bmp);
 
 CRect rect;
 GetClientRect(&rect);

 MyTransparentBlt2(pDC->m_hDC,0,0,bmp.bmWidth,bmp.bmHeight,
  cdc.m_hDC,0,0,bmp.bmWidth,bmp.bmHeight,GetPixel(cdc.m_hDC,46,46));

 cdc.DeleteDC();
 return true;
 //return CDialog::OnEraseBkgnd(pDC);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心若冰清自然开心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值