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

    技术2022-05-19  25

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


    最新回复(0)