Sam
Sam

Reputation: 2552

Completely transparent image

Does anyone know how I can create a Completely transparent image or given am image (HBITMAP) how can I wipe it Completely so that all pixels in it are 100% transparent?

Thank you.

Upvotes: 0

Views: 1011

Answers (4)

Sam
Sam

Reputation: 2552

I also found the solution without the use of 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 will be a 320 x 240 bitmap that is completely transparent

Upvotes: 1

Sam
Sam

Reputation: 2552

I found the answer in GDI+. The best way to do this is to attach the device context of the image that you are working with with GDI+ graphic object and then call its clear method.

Upvotes: 0

James
James

Reputation: 9278

You can use a monochrome bitmap as a mask to create transparent images from colour ones. This is quite complex. See this example (in VB but uses Win32 APIs directly)

Alternatively, the TransparentBlt function might make what you're trying to do unnecessary.

Upvotes: 0

Remy Lebeau
Remy Lebeau

Reputation: 595320

The bitmap needs to be 32-bit so it has an alpha channel that you can set opacity values with. If your image is not 32-bit, you will have to create a new 32-bit bitmap and copy the original pixels into it.

Upvotes: 2

Related Questions