首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

CreateCompatibleBit地图能否创建一个透明的底色的位图

2013-02-19 
CreateCompatibleBitmap能否创建一个透明的底色的位图如题,在调用CreateCompatibleBitmap后默认创建的是黑

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);

[解决办法]
引用:
我用你提供的代码取代CreateCompatibleBitmap,但是这个创建出来的位图还是黑色的底色呀,并非透明的,是不是还要别的操作?请指导一下

绝对是透明的!!
只不过,我不知道你是怎么"看出来"不透明的?
不信用GDIPlus直接把这个hBitmap保存为PNG试试!!
[解决办法]
要透明就不要用BitBlt
用AlphaBlend
[解决办法]
反正dc里的位图有透明的区域,就不能用BitBlt,否则画出来该透明的区域不会是透明的
[解决办法]
除非你用TransparentBlt那原理
[解决办法]
你想怎么个透明法?
你要透出来什么
[解决办法]
引用:
或者CreateCompatibleBitmap时创建个蓝色背景,总之是在它创建的时候能改变它的底色,别告诉我说这是不能改变的,只能另外画一层上去...
CreateCompatibleBitmap的默认背景就是黑白两色
好像真的不能改变

热点排行