完全透明的图像

Completely transparent image

本文关键字:图像 透明      更新时间:2023-10-16

有人知道我如何创建一个完全透明的图像或给定的图像(HBITMAP)我怎么能完全擦除它,使所有像素在它是100%透明?

谢谢。

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

我也找到了不使用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位图,是完全透明的

您可以使用单色位图作为蒙版,从彩色图像创建透明图像。这是相当复杂的。请看这个例子(在VB中,但直接使用Win32 api)

或者,TransparentBlt函数可能会使您尝试做的事情变得不必要。

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