本文共 1353 字,大约阅读时间需要 4 分钟。
/**图像合成函数*输入:客户区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);}
转载地址:http://xngpb.baihongyu.com/