2010-02-25 44 views
1

有沒有一種方法可以確定HDC是否使用Alpha通道?我讀Question 333559Question 685684,但他們的問題是關於BITMAP。顯然,某些HDC具有alpha通道(儘管它們可能不會使用它,稱爲「類型1」),而其他類型則不會(「類型2」)。我通過執行以下操作知道這一點:HDC是否使用alpha通道?

給定一個HDC,

  1. 創建一個兼容的DC,並創建一個DIB部分。將創建的HBITMAP選擇到兼容的DC中。

  2. BitBl源HDC到兼容的DC。現在檢查DIB部分位。對於類型2的HDC,在每3個字節之後,總有一個字節爲0(如255 255 255 0)。對於類型1,這些字節通常是255(如250 240 230 255)。爲了避免誤報,我在調用之前將這些位memset置於全部0x80。

  3. 直接在源HDC上使用GetDIBits,將HBITMAP指定爲GetCurrentObject(hdc,OBJ_BITMAP)。對於這兩種類型的HDC,第4個字節總是0.

  4. 通過調用ExtTextOut更改DC位圖。對於類型2,ExtTextOut總是將第4個字節設置爲0.對於類型1,ExtTextOut始終保持它們不變。

我還注意到,由API創建的源HDC(CreateCompatibleDC(),調用BeginPaint()...)總是型2型。1 HDC是從標準控件(如菜單文本)。即使是類型1的HDC I CreateCompatibleDC也變成了類型2.

所以,一方面,我很沮喪,微軟並沒有向開發人員提供平等的信息(另一個例子可能是你無法知道方向HBITMAP創建後),另一方面,我仍然想知道是否有辦法區分這些HDC。

感謝您的幫助。

回答

0

我只是模仿GDI的行爲,現在一切正常。

相關問題