VC 透明绘图

 VC 透明绘图_第1张图片

中间的位图就是透明绘图而成,屏蔽了背景黑色。

VC 透明绘图_第2张图片

 

void CTranspantDlg::OnButton1() 
{
	CBitmap bit;
	bit.LoadBitmap(IDB_BITMAP5);
	BITMAP bi;
	bit.GetBitmap(&bi);
	int width=bi.bmWidth;
	int heigh=bi.bmHeight;
	CClientDC dc(this);
	CDC memDC;
	memDC.CreateCompatibleDC(&dc);
	memDC.SelectObject(&bit);
	TransparentBlt(dc.GetSafeHdc(),200,200,width,heigh,memDC.GetSafeHdc(),0,0,width,heigh,RGB(0,0,0));
}


在我使用TransparentBlt函数的时候,发现了这个问题,用BitBlt可以显示,TransparentBlt就不能。
后经过测试,发现是TransparentBlt函数第9个和第10个参数的问题,
即nWidthSrc 和nHeightSrc这两个参数
这两个参数必须小于或等于位图的实际宽度和高度,否则此函数会调用失败,
在使用中要特别注意。
使用此函数须加载msimg32.lib库
#pragma comment( lib, "msimg32.lib" )
而TransparentBlt的位图不能为24色,只能是8位或者黑白图像

 

 

或者用自己写的透明绘图函数

void CTranspantDlg::DrawTransparentBitmap(CDC *pDC,UINT IDImage,int x,int y,COLORREF rgbMask)
{
    CDC ImageDC,MaskDC; 
	CBitmap Image,*pOldImage; 
	BITMAP imgInfo;
	CBitmap maskBitmap,*pOldMaskDCBitmap ; 
	Image.LoadBitmap(IDImage);//加载图片资源 
	Image.GetBitmap(&imgInfo);//取得图片资源信息
	ImageDC.CreateCompatibleDC(pDC); //创建pDC的兼容DC(ImageDC)
	pOldImage=ImageDC.SelectObject(&Image); //将图片选如dc
	MaskDC.CreateCompatibleDC(pDC); //创建pDC的兼容DC(MaskDC)
	maskBitmap.CreateBitmap( imgInfo.bmWidth, imgInfo.bmHeight, 1, 1, NULL ); //创建掩码图片
	pOldMaskDCBitmap = MaskDC.SelectObject( &maskBitmap ); //将掩码图片选入MaskDC
	ImageDC.SetBkColor(rgbMask); //设置ImageDC的背景颜色
	//将ImageDC复制到掩码DC
	MaskDC.BitBlt( 0, 0, imgInfo.bmWidth, imgInfo.bmHeight, &ImageDC, 0, 0, SRCCOPY ); 
	ImageDC.SetBkColor(RGB(0,0,0)); 
	ImageDC.SetTextColor(RGB(255,255,255)); 
	//将ImageDC和掩码DC相与
	ImageDC.BitBlt(0, 0, imgInfo.bmWidth, imgInfo.bmHeight, &MaskDC, 0, 0, SRCAND); 
	pDC->BitBlt(x,y,imgInfo.bmWidth, imgInfo.bmHeight, &MaskDC, 0, 0, SRCAND); 
	pDC->BitBlt(x,y,imgInfo.bmWidth, imgInfo.bmHeight, &ImageDC, 0, 0,SRCPAINT); 
	MaskDC.SelectObject(pOldMaskDCBitmap); 
	ImageDC.SelectObject(pOldImage); 
}

void CTranspantDlg::OnButton2() 
{
	CClientDC dc(this);
	DrawTransparentBitmap(&dc,IDB_BITMAP5,300,300,RGB(0,0,0));
}


VC 透明绘图_第3张图片 

 

你可能感兴趣的:(image,测试,null,BI)