用BitBlt實現透明貼圖
阿新 • • 發佈:2019-02-04
把透明貼圖的原理記下來! 實驗素材:有兩張點陣圖:bk.bmp是背景點陣圖,football.bmp包含透明區域,透明色為藍色RGB(0,0,0xff)
實驗目的:以bk.bmp為背景,將football.bmp繪製到背景中,形成如下的最終效果圖。
1.透明點陣圖繪製原理
假設football.bmp ->載入 HBITMAP hImageBMP -> 選入 HDC hImageDC
2.生成足球的單色掩碼點陣圖,透明區域為白色(全1),非透明區域為黑色(全0)
HBITMAP hMaskBMP = CreateBitmap(nWidthDest, nHeightDest, 1, 1, NULL); // 建立單色點陣圖
SetBkColor(hImageDC, RGB(0,0,0xff)); // 設定背景色為藍色
BitBlt(hMaskDC, 0, 0, nWidthDest, nHeightDest, hImageDC, 0, 0, SRCCOPY); // 拷貝到hMaskDC
這樣足球點陣圖中藍色區域在掩碼點陣圖中成了白色,其它區域為黑色,此時hMaskBMP 如下圖:
3.設定背景色為黑色,前景色為白色,將掩碼點陣圖(圖一)與足球點陣圖相"與"
SetBkColor(hImageDC, RGB(0,0,0));
SetTextColor(hImageDC, RGB(255,255,255));
BitBlt(hImageDC, 0, 0, nWidthDest, nHeightDest, hMaskDC, 0, 0, SRCAND);
這樣,掩碼點陣圖中背景色(黑色)的區域在hImageBMP中被保留,前景色(白色)的部分變為黑色。 此時hImageBMP 如下圖:
4.設定背景色為白色,前景色為黑色,將掩碼點陣圖(圖一)與背景進行“與”運算
SetBkColor(hdcDest,RGB(255,255,255));
SetTextColor(hdcDest,RGB(0,0,0));
BitBlt(hdcDest, nXOriginDest, nYOriginDest, nWidthDest, nHeightDest, hMaskDC, 0, 0, SRCAND);
掩碼中白色區域(資料與1相“與”結果不變)使背景保持不變,黑色區域變成黑色,此時背景顯示如下:
5.將hImageBMP(圖二)與背景(圖三)進行“或”運算
BitBlt(hdcDest, nXOriginDest, nYOriginDest, nWidthDest, nHeightDest, hImageDC, 0, 0, SRCPAINT);
這樣就將足球繪製到背景上了。
實驗目的:以bk.bmp為背景,將football.bmp繪製到背景中,形成如下的最終效果圖。
1.透明點陣圖繪製原理
假設football.bmp ->載入 HBITMAP hImageBMP -> 選入 HDC hImageDC
2.生成足球的單色掩碼點陣圖,透明區域為白色(全1),非透明區域為黑色(全0)
HBITMAP hMaskBMP = CreateBitmap(nWidthDest, nHeightDest, 1, 1, NULL); // 建立單色點陣圖
SetBkColor(hImageDC, RGB(0,0,0xff)); // 設定背景色為藍色
BitBlt(hMaskDC, 0, 0, nWidthDest, nHeightDest, hImageDC, 0, 0, SRCCOPY); // 拷貝到hMaskDC
這樣足球點陣圖中藍色區域在掩碼點陣圖中成了白色,其它區域為黑色,此時hMaskBMP 如下圖:
3.設定背景色為黑色,前景色為白色,將掩碼點陣圖(圖一)與足球點陣圖相"與"
SetBkColor(hImageDC, RGB(0,0,0));
SetTextColor(hImageDC, RGB(255,255,255));
BitBlt(hImageDC, 0, 0, nWidthDest, nHeightDest, hMaskDC, 0, 0, SRCAND);
這樣,掩碼點陣圖中背景色(黑色)的區域在hImageBMP中被保留,前景色(白色)的部分變為黑色。 此時hImageBMP 如下圖:
4.設定背景色為白色,前景色為黑色,將掩碼點陣圖(圖一)與背景進行“與”運算
SetBkColor(hdcDest,RGB(255,255,255));
SetTextColor(hdcDest,RGB(0,0,0));
BitBlt(hdcDest, nXOriginDest, nYOriginDest, nWidthDest, nHeightDest, hMaskDC, 0, 0, SRCAND);
掩碼中白色區域(資料與1相“與”結果不變)使背景保持不變,黑色區域變成黑色,此時背景顯示如下:
5.將hImageBMP(圖二)與背景(圖三)進行“或”運算
BitBlt(hdcDest, nXOriginDest, nYOriginDest, nWidthDest, nHeightDest, hImageDC, 0, 0, SRCPAINT);
這樣就將足球繪製到背景上了。