Полностью прозрачное изображение - PullRequest
0 голосов
/ 07 октября 2011

Кто-нибудь знает, как я могу создать полностью прозрачное изображение или данное изображение (HBITMAP), как я могу полностью его стереть, чтобы все пиксели в нем были на 100% прозрачными?

Спасибо.

Ответы [ 4 ]

2 голосов
/ 07 октября 2011

Растровое изображение должно быть 32-разрядным, чтобы иметь альфа-канал, с помощью которого можно установить значения непрозрачности.Если ваше изображение не является 32-разрядным, вам придется создать новое 32-разрядное растровое изображение и скопировать в него исходные пиксели.

1 голос
/ 09 апреля 2012

Я также нашел решение без использования 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

0 голосов
/ 11 октября 2011

Я нашел ответ в GDI +.Лучший способ сделать это - присоединить контекст устройства к изображению, с которым вы работаете, с графическим объектом GDI +, а затем вызвать его метод clear.

0 голосов
/ 07 октября 2011

Вы можете использовать монохромное растровое изображение в качестве маски для создания прозрачных изображений из цветных. Это довольно сложно. См. этот пример (в VB, но напрямую использует Win32 API)

Кроме того, функция TransparentBlt может сделать ненужным то, что вы пытаетесь сделать.

...