完全透明的图像

时间:2011-10-06 20:05:09

标签: c++ windows bitmap gdi

有谁知道如何创建完全透明的图像或给定图像(HBITMAP)如何完全擦除它以使其中的所有像素都是100%透明的?

谢谢。

4 个答案:

答案 0 :(得分:2)

位图需要为32位,因此它有一个alpha通道,您可以使用它设置不透明度值。如果您的图像不是32位,则必须创建一个新的32位位图并将原始像素复制到其中。

答案 1 :(得分: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 x 240位图

答案 2 :(得分:0)

您可以使用单色位图作为蒙版,从彩色图像创建透明图像。这非常复杂。请参阅this示例(在VB中,但直接使用Win32 API)

或者,TransparentBlt功能可能会使您尝试做的事情变得多余。

答案 3 :(得分:0)

我在GDI +中找到了答案。执行此操作的最佳方法是使用GDI +图形对象附加您正在使用的图像的设备上下文,然后调用其clear方法。