有谁知道如何创建完全透明的图像或给定图像(HBITMAP
)如何完全擦除它以使其中的所有像素都是100%透明的?
谢谢。
答案 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方法。