//注:原文章出处忘了,只记得根据当时的方法做的两个颜色/图片合成的函数
/************************************************************************/
/* 颜色和颜色进行合成
/************************************************************************/
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