在Win32下的單色位掩碼,它是一種常見的技術做以生成位圖單色位掩碼透明度使用下列內容:如何genrate爲32位的位圖
SetBkColor(hdcSource, clrTransparency);
VERIFY(BitBlt(hdcMask, 0, 0, bm.bmWidth, bm.bmHeight, hdcSource, 0, 0, SRCCOPY));
這假定hdcSource是一個保存源圖像的存儲器DC,hdcMask是保存相同大小的單色位圖的存儲器DC(因此它們都是32x32,但是源是4位顏色,而目標是1位單色)。
但是,當源是32位顏色+ alpha時,這似乎失敗了。而不是在hdcMask中獲取單色位圖,我得到一個全黑的蒙版。沒有位被設置爲白色(1)。而這適用於4位色彩源。
我的search-foo失敗了,因爲我似乎無法找到對此特定問題的任何引用。
我已經隔離,這確實是我的代碼中的問題:即如果我使用16色(4位)的源位圖,它的工作原理;如果我使用32位圖像,則會生成全黑色蒙版。
在32位彩色圖像的情況下,我應該使用另一種方法嗎? alpha通道是否會覆蓋上述技術的正常行爲?
感謝您提供的任何幫助!
附錄:我仍然無法找到爲我的GDI +生成的源位圖創建有效單色位圖的技術。
通過簡單地根本不生成單色位掩碼,我已經略微緩解了我的特定問題,而是使用了TransparentBlt(),這似乎是正確的(但我不知道他們在內部做了什麼這是允許他們正確掩蓋圖像的任何不同)。
這可能是有用的,有一個非常好的,工作職能:
HBITMAP CreateTransparencyMask(HDC hdc, HBITMAP hSource, COLORREF crTransparency);
凡總是創建一個有效的透明面罩,無論hSource的顏色深度。
想法?
GDI停留在24bpp。 TransparentBlt()有點不尋常,它被記錄爲支持32bpp。也許是轉向GDI +的時候了。 – 2010-10-15 15:31:29