建立透明點陣圖的方法
阿新 • • 發佈:2019-02-17
在做介面開發的時候經常需要去建立透明的點陣圖,由於MFC沒有封裝這樣的函式,經過多方查詢資料和試驗,終於寫出了一個可以建立透明點陣圖的函式,下面給大家分享一下。
void BitTrans(
int nXDest, // 目標起點X
int nYDest,// 目標起點Y
int nWidthDest,// 目標寬度
int nHeightDest,// 目標高度
CDC* pDC, // 目標DC
int nXSrc,// 來源起點X
int nYSrc,// 來源起點Y
COLORREF crTrans// 透明色
)
{
CMemDC dcImage(nWidthDest, nHeightDest,pDC);//臨時DC
CBitmap bmpMask;
bmpMask.CreateBitmap(nWidthDest, nHeightDest, 1, 1, NULL); // 建立單色掩碼點陣圖
CDC dcMask;//掩碼DC
dcMask.CreateCompatibleDC(pDC);
dcMask.SelectObject(bmpMask);
//將載入點陣圖的記憶體DC中的點陣圖,拷貝到臨時DC中
dcImage.BitBlt( 0, 0, nWidthDest, nHeightDest, this, nXSrc, nYSrc, SRCCOPY);
// 設定臨時DC的透明色
dcImage.SetBkColor(crTrans);
//掩碼DC的透明區域為白色其他區域為黑色
dcMask.BitBlt(0, 0, nWidthDest, nHeightDest, &dcImage, 0, 0, SRCCOPY);
//臨時DC透明區域為黑色,其他區域保持不變
dcImage.SetBkColor(RGB(0,0,0));
dcImage.SetTextColor(RGB(255,255,255));
dcImage.BitBlt( 0, 0, nWidthDest, nHeightDest, &dcMask, 0, 0, SRCAND);
// 目標DC透明部分保持螢幕不變,其他部分變成黑色
pDC ->SetBkColor(RGB(255,255,255));
pDC ->SetTextColor(RGB(0,0,0));
pDC ->BitBlt(nXDest, nYDest, nWidthDest, nHeightDest, &dcMask, 0, 0, SRCAND);
pDC ->BitBlt(nXDest, nYDest, nWidthDest, nHeightDest, &dcImage, 0, 0, SRCPAINT);
}
void BitTrans(
int nXDest, // 目標起點X
int nYDest,// 目標起點Y
int nWidthDest,// 目標寬度
int nHeightDest,// 目標高度
CDC* pDC, // 目標DC
int nXSrc,// 來源起點X
int nYSrc,// 來源起點Y
COLORREF crTrans// 透明色
)
{
CMemDC dcImage(nWidthDest, nHeightDest,pDC);//臨時DC
CBitmap bmpMask;
bmpMask.CreateBitmap(nWidthDest, nHeightDest, 1, 1, NULL); // 建立單色掩碼點陣圖
CDC dcMask;//掩碼DC
dcMask.CreateCompatibleDC(pDC);
dcMask.SelectObject(bmpMask);
//將載入點陣圖的記憶體DC中的點陣圖,拷貝到臨時DC中
dcImage.BitBlt( 0, 0, nWidthDest, nHeightDest, this, nXSrc, nYSrc, SRCCOPY);
// 設定臨時DC的透明色
dcImage.SetBkColor(crTrans);
//掩碼DC的透明區域為白色其他區域為黑色
dcMask.BitBlt(0, 0, nWidthDest, nHeightDest, &dcImage, 0, 0, SRCCOPY);
//臨時DC透明區域為黑色,其他區域保持不變
dcImage.SetBkColor(RGB(0,0,0));
dcImage.SetTextColor(RGB(255,255,255));
dcImage.BitBlt( 0, 0, nWidthDest, nHeightDest, &dcMask, 0, 0, SRCAND);
// 目標DC透明部分保持螢幕不變,其他部分變成黑色
pDC ->SetBkColor(RGB(255,255,255));
pDC ->SetTextColor(RGB(0,0,0));
pDC ->BitBlt(nXDest, nYDest, nWidthDest, nHeightDest, &dcMask, 0, 0, SRCAND);
pDC ->BitBlt(nXDest, nYDest, nWidthDest, nHeightDest, &dcImage, 0, 0, SRCPAINT);
}