请教:关于图片背景透明的问题?
在VC里怎样使位图的背景在显示的时候透明? 问题点数:20、回复次数:7Top
1 楼gwinner(动力引擎)回复于 2004-12-03 09:20:51 得分 0
在位图的编辑界面,调色板中有一个样子象显示器的,它就是背景色。Top
2 楼gwinner(动力引擎)回复于 2004-12-03 09:21:28 得分 0
用它填充背景就可以了Top
3 楼gwinner(动力引擎)回复于 2004-12-03 09:31:55 得分 20
对不起楼主,我误认为是ICON(图标)了。
位图不可以的,但是你可以在显示时处理成透明的。下面是一个可以完成此功能的函数:
void
DrawTransparentBitmap(CDC *pDC, UINT IDImage,CRect &rect, COLORREF rgbMask)
{
CDC ImageDC;
CDC MaskDC;
CBitmap Image;
CBitmap *pOldImage;
CBitmap maskBitmap;
CBitmap *pOldMaskDCBitmap ;
Image.LoadBitmap(IDImage);
ImageDC.CreateCompatibleDC(pDC);
pOldImage = ImageDC.SelectObject(&Image);
MaskDC.CreateCompatibleDC(pDC);
maskBitmap.CreateBitmap(rect.Width(), rect.Height(), 1, 1, NULL);
pOldMaskDCBitmap = MaskDC.SelectObject( &maskBitmap );
ImageDC.SetBkColor(rgbMask);
MaskDC.BitBlt(0, 0, rect.Width(), rect.Height(), &ImageDC, 0, 0, SRCCOPY);
ImageDC.SetBkColor(RGB(0, 0, 0));
ImageDC.SetTextColor(RGB(255, 255, 255));
ImageDC.BitBlt(0, 0, rect.Width(), rect.Height(), &MaskDC, 0, 0, SRCAND);
pDC->BitBlt(rect.left,rect.top,rect.Width(), rect.Height(), &MaskDC, 0, 0, SRCAND);
pDC->BitBlt(rect.left,rect.top,rect.Width(), rect.Height(), &ImageDC, 0, 0,SRCPAINT);
MaskDC.SelectObject(pOldMaskDCBitmap);
ImageDC.SelectObject(pOldImage);
}
它的原理是用反色重画背景。使用方法如下:
void CYourWnd::OnPaint()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CRect rect;
CPaintDC dc(this); // device context for painting
m_sticPicture.GetWindowRect(rect);
ScreenToClient(rect);
DrawTransparentBitmap(&dc, IDB_YOURBITMAP, rect, RGB(255,255,255)/*back color*/);
}Top
4 楼BOBO0202(爱与恨)回复于 2004-12-03 09:34:44 得分 0
好的,我试一试。Top
5 楼BOBO0202(爱与恨)回复于 2004-12-03 10:15:08 得分 0
我刚才试了,不可以,图片还是原封不动的显示,背景没有透明。Top
6 楼gwinner(动力引擎)回复于 2004-12-03 10:46:26 得分 0
Picture控件的Visible属性不要选择Top
7 楼BOBO0202(爱与恨)回复于 2004-12-03 11:29:01 得分 0
谢谢动力引擎,我把分给你了,希望以后多多帮忙、Top




