代码_图像_透明复合

/*
*图像合成函数
*输入:客户区GDI句柄
*输出:空
*/
void abc::paintPicAnd(CDC *cdc)
{
//变量初始化
	CRect rect;
	CBitmap f_bmp,b_bmp,m_bmp;
	CDC f_cdc,b_cdc,m_cdc;
	COLORREF colorTran;
	GetClientRect(rect);
	CBrush brush(RGB(255,255,255));
//CDC适配创建
	f_cdc.CreateCompatibleDC(cdc);
	b_cdc.CreateCompatibleDC(cdc);
	m_cdc.CreateCompatibleDC(cdc);
//Bitmap创建
	f_bmp.LoadBitmap(IDB_FRONT);
	b_bmp.LoadBitmap(IDB_BACK);
	m_bmp.CreateBitmap(rect.Width(),rect.Height(),1,1,NULL);//遮罩层创建的是单色图片,黑白作为逻辑(二值性)
//CDC,Bitmap绑定
	f_cdc.SelectObject(&f_bmp);
	b_cdc.SelectObject(&b_bmp);
	m_cdc.SelectObject(&m_bmp);
//遮罩层填充
	colorTran=f_cdc.GetPixel(1,1);
	f_cdc.SetBkColor(colorTran);
	m_cdc.SelectObject(&brush);
	m_cdc.FillRect(&rect,&brush);
//前景复制到遮罩层,真彩向单色拷贝时,真彩的背景色拷贝为白色,其他颜色为黑色
	m_cdc.BitBlt(0,0,rect.Width(),rect.Height(),&f_cdc,0,0,SRCCOPY);
///遮罩 与 复制到前景,单色向真彩转换时,白色转为真彩的背景色,黑色转为前景色
	f_cdc.SetBkColor(RGB(0,0,0));//遮罩层底色黑色
	f_cdc.SetTextColor(RGB(255,255,255));//遮罩层画笔白色
//	cdc->BitBlt(0,0,rect.Width(),rect.Height(),&m_cdc,0,0,SRCCOPY);
	f_cdc.BitBlt(0,0,rect.Width(),rect.Height(),&m_cdc,0,0,SRCAND);
//遮罩 与 复制到背景
	b_cdc.SetBkColor(RGB(255,255,255));//遮罩层底色白色
	b_cdc.SetTextColor(RGB(0,0,0));//遮罩层画笔黑色
	b_cdc.BitBlt(0,0,rect.Width(),rect.Height(),&m_cdc,0,0,SRCAND);
//前景 或 复制到背景
	b_cdc.BitBlt(0,0,rect.Width(),rect.Height(),&f_cdc,0,0,SRCPAINT);
//背景复制到客户区	
	cdc->BitBlt(0,0,rect.Width(),rect.Height(),&b_cdc,0,0,SRCCOPY);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值