CreateCompatibleBitmap能否创建一个透明的底色的位图
如题,在调用CreateCompatibleBitmap后默认创建的是黑色背景的位图,有什么办法让其背景色透明的?我是想让其创建时的底色就是透明的,网上人家说再画一层上去,比如:
HDC memDC = CreateCompatibleDC (dc.m_hDC);
HBITMAP memBM = CreateCompatibleBitmap (dc.m_hDC, rect.right, rect.bottom);
SelectObject(memDC, memBM);
Graphics *m_pBackBufferG = new Graphics(memDC);
Color backgroundColor(255, 255, 255, 255);
SolidBrush backgroundBrush(backgroundColor);
// Fill background
RectF fillRect(0.0f, 0.0f, (float) rect.right, (float) rect.bottom);
m_pBackBufferG->FillRectangle(&backgroundBrush, fillRect);
用FillRectangle是不能达到我想要的效果,因为我要做的东西最后还是需要透明的,一透明过去还是能看到黑色的背景,所以我希望能直接在CreateCompatibleBitmap时就创建一个透明的背景而不是黑色的,请大家献计献策,分数好说。
[解决办法]
CreateCompatibleBitmap创建透明背景没做过,一般我会取对应背景处的颜色或位图,然后填充图像达到透明效果
[解决办法]
创建32位位图:
HDC hDC=::GetDC(m_hWnd);
HDC hMemDC=::CreateCompatibleDC(hDC);
BITMAPINFO bitmapinfo;
bitmapinfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bitmapinfo.bmiHeader.biBitCount = 32;
bitmapinfo.bmiHeader.biHeight = m_nHeight;
bitmapinfo.bmiHeader.biWidth = m_nWidth;
bitmapinfo.bmiHeader.biPlanes = 1;
bitmapinfo.bmiHeader.biCompression=BI_RGB;
bitmapinfo.bmiHeader.biXPelsPerMeter=0;
bitmapinfo.bmiHeader.biYPelsPerMeter=0;
bitmapinfo.bmiHeader.biClrUsed=0;
bitmapinfo.bmiHeader.biClrImportant=0;
bitmapinfo.bmiHeader.biSizeImage = m_nWidth* m_nHeight *bitmapinfo.bmiHeader.biBitCount / 8;
HBITMAP hBitmap=::CreateDIBSection (hMemDC,&bitmapinfo, 0,NULL, 0, 0);
[解决办法]
绝对是透明的!!
只不过,我不知道你是怎么"看出来"不透明的?
不信用GDIPlus直接把这个hBitmap保存为PNG试试!!
[解决办法]
要透明就不要用BitBlt
用AlphaBlend
[解决办法]
反正dc里的位图有透明的区域,就不能用BitBlt,否则画出来该透明的区域不会是透明的
[解决办法]
除非你用TransparentBlt那原理
[解决办法]
你想怎么个透明法?
你要透出来什么
[解决办法]
CreateCompatibleBitmap的默认背景就是黑白两色
好像真的不能改变