使用CDC进行颜色/图片合成(透明处理)

8 篇文章 0 订阅
7 篇文章 0 订阅


//注:原文章出处忘了,只记得根据当时的方法做的两个颜色/图片合成的函数
/************************************************************************/
/* 颜色和颜色进行合成
/************************************************************************/
void DrawAlphaRect(CDC* pDC, CRect& rect, COLORREF clr, unsigned char cAlpha)
{
CDC memDC;
CBitmap bmp, *pOldBmp = NULL;
memDC.CreateCompatibleDC(pDC);
bmp.CreateCompatibleBitmap(pDC, rect.Width(), rect.Height());
pOldBmp = memDC.SelectObject(&bmp);
memDC.FillSolidRect(0, 0, rect.Width(), rect.Height(), clr);
BLENDFUNCTION bf;
bf.BlendOp = AC_SRC_OVER;
bf.BlendFlags = 0;
bf.SourceConstantAlpha = cAlpha;
bf.AlphaFormat = 0; //..
pDC->AlphaBlend(rect.left, rect.top, rect.right, rect.bottom, &memDC, 0, 0, rect.Width(), rect.Height(), bf);
memDC.SelectObject(pOldBmp);
}
/************************************************************************/
/* 图片和颜色进行合成
/************************************************************************/
void DrawAlphaBitmap(CDC* pDC, CRect& rect, CBitmap& bmp, unsigned char cAlpha)
{
CDC memDC;
memDC.CreateCompatibleDC(pDC);
CSize sz = bmp.GetBitmapDimension();
BITMAP bm;
bmp.GetBitmap(&bm);
sz.SetSize(bm.bmWidth, bm.bmHeight);
CBitmap* pOldBmp = memDC.SelectObject(&bmp);
BLENDFUNCTION bf;
bf.BlendOp = AC_SRC_OVER;
bf.BlendFlags = 0;
bf.SourceConstantAlpha = cAlpha;
bf.AlphaFormat = 0;
pDC->AlphaBlend(rect.left, rect.top, rect.right, rect.bottom, &memDC, 0, 0, sz.cx, sz.cy, bf);
memDC.SelectObject(pOldBmp);
}
//两个调用处理
void Test1()
{
COLORREF clr = RGB(141, 173, 223);
CDC* pDC = GetDC();
DrawAlphaRect(pDC, CRect(10, 10, 500, 200), clr, 194);
ReleaseDC(pDC);
}
void Test2()
{
CBitmap bmp;
bmp.LoadBitmap(IDB_BITMAP_WS);
CDC* pDC = GetDC();
DrawAlphaBitmap(pDC, CRect(10, 210, 500, 500), bmp, 194);
ReleaseDC(pDC);
}
//注:原文章出处忘了,只记得根据当时的方法做的两个颜色/图片合成的函数
/************************************************************************/
/* 颜色和颜色进行合成
/************************************************************************/
void DrawAlphaRect(CDC* pDC, CRect& rect, COLORREF clr, unsigned char cAlpha)
{
CDC memDC;
CBitmap bmp, *pOldBmp = NULL;
memDC.CreateCompatibleDC(pDC);
bmp.CreateCompatibleBitmap(pDC, rect.Width(), rect.Height());
pOldBmp = memDC.SelectObject(&bmp);
memDC.FillSolidRect(0, 0, rect.Width(), rect.Height(), clr);
BLENDFUNCTION bf;
bf.BlendOp = AC_SRC_OVER;
bf.BlendFlags = 0;
bf.SourceConstantAlpha = cAlpha;
bf.AlphaFormat = 0; //..
pDC->AlphaBlend(rect.left, rect.top, rect.right, rect.bottom, &memDC, 0, 0, rect.Width(), rect.Height(), bf);
memDC.SelectObject(pOldBmp);
}
/************************************************************************/
/* 图片和颜色进行合成
/************************************************************************/
void DrawAlphaBitmap(CDC* pDC, CRect& rect, CBitmap& bmp, unsigned char cAlpha)
{
CDC memDC;
memDC.CreateCompatibleDC(pDC);
CSize sz = bmp.GetBitmapDimension();
BITMAP bm;
bmp.GetBitmap(&bm);
sz.SetSize(bm.bmWidth, bm.bmHeight);
CBitmap* pOldBmp = memDC.SelectObject(&bmp);
BLENDFUNCTION bf;
bf.BlendOp = AC_SRC_OVER;
bf.BlendFlags = 0;
bf.SourceConstantAlpha = cAlpha;
bf.AlphaFormat = 0;
pDC->AlphaBlend(rect.left, rect.top, rect.right, rect.bottom, &memDC, 0, 0, sz.cx, sz.cy, bf);
memDC.SelectObject(pOldBmp);
}
//两个调用处理
void Test1()
{
COLORREF clr = RGB(141, 173, 223);
CDC* pDC = GetDC();
DrawAlphaRect(pDC, CRect(10, 10, 500, 200), clr, 194);
ReleaseDC(pDC);
}
void Test2()
{
CBitmap bmp;
bmp.LoadBitmap(IDB_BITMAP_WS);
CDC* pDC = GetDC();
DrawAlphaBitmap(pDC, CRect(10, 210, 500, 500), bmp, 194);
ReleaseDC(pDC);
}

//注:原文章出处忘了,只记得根据当时的方法做的两个颜色/图片合成的函数

/************************************************************************/
/* 颜色和颜色进行合成
/************************************************************************/
void DrawAlphaRect(CDC* pDC, CRect& rect, COLORREF clr, unsigned char cAlpha)
{
CDC memDC;
CBitmap bmp, *pOldBmp = NULL;
memDC.CreateCompatibleDC(pDC);
bmp.CreateCompatibleBitmap(pDC, rect.Width(), rect.Height());
pOldBmp = memDC.SelectObject(&bmp);
memDC.FillSolidRect(0, 0, rect.Width(), rect.Height(), clr);
BLENDFUNCTION bf;
bf.BlendOp = AC_SRC_OVER;
bf.BlendFlags = 0;
bf.SourceConstantAlpha = cAlpha;
bf.AlphaFormat = 0; //..
pDC->AlphaBlend(rect.left, rect.top, rect.right, rect.bottom, &memDC, 0, 0, rect.Width(), rect.Height(), bf);
memDC.SelectObject(pOldBmp);
}
/************************************************************************/
/* 图片和颜色进行合成
/************************************************************************/
void DrawAlphaBitmap(CDC* pDC, CRect& rect, CBitmap& bmp, unsigned char cAlpha)
{
CDC memDC;
memDC.CreateCompatibleDC(pDC);
CSize sz = bmp.GetBitmapDimension();
BITMAP bm;
bmp.GetBitmap(&bm);
sz.SetSize(bm.bmWidth, bm.bmHeight);
CBitmap* pOldBmp = memDC.SelectObject(&bmp);
BLENDFUNCTION bf;
bf.BlendOp = AC_SRC_OVER;
bf.BlendFlags = 0;
bf.SourceConstantAlpha = cAlpha;
bf.AlphaFormat = 0;
pDC->AlphaBlend(rect.left, rect.top, rect.right, rect.bottom, &memDC, 0, 0, sz.cx, sz.cy, bf);
memDC.SelectObject(pOldBmp);
}
//两个调用处理
void Test1()
{
COLORREF clr = RGB(141, 173, 223);
CDC* pDC = GetDC();
DrawAlphaRect(pDC, CRect(10, 10, 500, 200), clr, 194);
ReleaseDC(pDC);
}
void Test2()
{
CBitmap bmp;
bmp.LoadBitmap(IDB_BITMAP_WS);
CDC* pDC = GetDC();
DrawAlphaBitmap(pDC, CRect(10, 210, 500, 500), bmp, 194);
ReleaseDC(pDC);
}

转自:http://blog.csdn.net/gxj1680/article/details/6333997
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值