完全透明的图像
Completely transparent image
有人知道我如何创建一个完全透明的图像或给定的图像(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方法。
相关文章:
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- OpenCV EqualizeHist()从彩色图像创建黑白图像
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 如何在全屏模式下(在OpenGL中)使背景透明
- 当使用透明的std函数对象时,我们还需要写空的尖括号吗
- 平均图像时图像损坏
- 在C++中使用GDAL可以将图像的像素坐标转换为lat,long吗
- 如何将图像传输到c++(dll)中的缓冲区,然后在c#的缓冲区中读/写
- 忽略父 Qt 快速图像的透明区域的鼠标区域单击事件
- OpenCV将透明图像绘制到另一个图像上
- GTK3透明标签,文本置于图像之上
- 在OpenCV中创建透明图像
- 使用C++/OpenCV或Matlab将图像的白色背景替换为透明背景
- 使背景的QLabel png图像透明的设计时间
- 完全透明的图像
- 在c++ / OpenGL中显示无边框透明背景上的图像
- 从png, winapi创建透明图像
- 如何使我的纹理背景透明?(我的图像已经没有背景了)
- 当将透明png图像转换为位图时,它不会保留透明度