您的位置:首页 > 其它

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

2018-03-08 21:53 274 查看
//注:原文章出处忘了,只记得根据当时的方法做的两个颜色/图片合成的函数/************************************************************************//* 颜色和颜色进行合成/************************************************************************/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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: