2012-12-25 44 views
1

我正在使用Win32。我發現here,如果你使用:如何在現有顏色上進行位圖透明度?

BitBlt(hdc, 0, 0, 32, 32, hdcMem, 0, 0, SRCAND); // hdc has mask in it 
BitBlt(hdc, 0, 0, 32, 32, hdcMem, 0, 0, SRCPAINT);`// hdc has regular image in it 

你可以創建一個位圖透明度。我的問題是,這依賴於目標位置上的hdc已經爲空的事實。我的不是,所以代碼會擦除(使黑色)成爲現有圖像的一部分。如何將透明位圖複製到已經繪製了東西的區域?

我試着將掩碼和圖像發送到1000,1000--在hdc中沒有繪製任何內容,然後在BitBlt()中使用SRCCOPY將結果從hdc複製到hdc。但是,無論是在1000,1000還是沒有正確複製。

回答

3

您可以改用TransparentBlt

BOOL TransparentBlt(
    _In_ HDC hdcDest, 
    _In_ int xoriginDest, 
    _In_ int yoriginDest, 
    _In_ int wDest, 
    _In_ int hDest, 
    _In_ HDC hdcSrc, 
    _In_ int xoriginSrc, 
    _In_ int yoriginSrc, 
    _In_ int wSrc, 
    _In_ int hSrc, 
    _In_ UINT crTransparent 
); 

如果源位圖的背景顏色爲黑色(#000000),剛剛成立crTransparentRGB(0,0,0),它會工作。

+0

哦,我的天哪,這是完美的!非常感謝!我必須包含Msimg32.lib才能工作,但它現在可以完美運行。 –