2011-10-06 194 views
0

有誰知道我可以如何創建一個完全透明的圖像或給定的圖像(HBITMAP)如何完全擦除它,使其中的所有像素都是100%透明?完全透明的圖像

謝謝。

+4

如果整個圖像是透明的,那麼,爲什麼具有圖像在所有? –

+0

我想將此圖片用作其他操作的基礎。 – Sam

回答

1

我還發現沒有使用GDI +的解決方案。

BITMAPV5HEADER bi = {sizeof(BITMAPV5HEADER), 320, 240, 1, 32, BI_BITFIELDS, 0, 0, 0, 0, 0, 0x00FF0000, 0x0000FF00, 0x000000FF, 0xFF000000}; 
HDC hDc = ::CreateCompatibleDC(0); 

if(NULL != hDc) 
{ 
    RGBQUAD* pArgb; 
    HBITMAP tBmp = ::CreateDIBSection(hDc, (BITMAPINFO*)&bi, DIB_RGB_COLORS, (void**)&pArgb, NULL, 0); 

    if(NULL != tBmp) 
    { 
     int x, y; 
     DWORD pBits; 

     pBits = (DWORD*)pArgb; 
     for(y = 0; y < bi.bV5Height; y++) 
     { 
      for(x = 0; x < bi.bV5Width; x++) 
      { 
       *pBits = 0; 
       pBits++; 
      } 
     } 
    } 
    ::DeleteObject(hDc); 
} 

TBMP將是一個320×240位圖,它是完全透明的

2

位圖需要是32位的,所以它有一個alpha通道,您可以使用它設置不透明度值。如果您的圖像不是32位,則必須創建一個新的32位位圖並將原始像素複製到其中。

+0

問題是如何創建此圖像,以及如何設置不透明度值? 'CreateBitmap'不給我任何設置不透明度的方法。 – Sam

+1

'CreateBitmap()'允許你創建一個32位的位圖,但是之後沒有用於設置像素不透明度的API。您必須直接操作像素數據。 'CreateBitmap()'返回一個指向原始像素數據的指針,這是一個二維像素數組。對於32位位圖,每個像素將是4個字節,使數據中的每個第4個字節成爲特定像素的Alpha通道。 –

+0

你能指點我設置第4個字節的例子嗎?這是一個純粹的API應用程序。 – Sam

0

您可以使用單色位圖作爲蒙版,從彩色圖像創建透明圖像。這很複雜。請參閱this示例(在VB中,但直接使用Win32 API)

或者,TransparentBlt函數可能會使您嘗試執行的操作不必要。

0

我在GDI +中找到了答案。這樣做的最好方法是將您正在使用的圖像的設備上下文與GDI +圖形對象相關聯,然後調用其清除方法。