MFC中透明位图原理
来源:互联网 发布:新手淘宝达人怎么赚钱 编辑:程序博客网 时间:2024/06/06 02:17
总之,就是不断反复遮罩“过滤掉”透明色就行,先来整段代码,后面再详细介绍。
void CTransDlg::OnPaint() {CPaintDC dc(this);CMemDC m_dc;if(!m_dc)m_dc.LoadBitmap(IDB_BITMAP4);CMemDC dcImage(100,100,&dc);CBitmap bmpMask;bmpMask.CreateBitmap(100,100,1,1,NULL);CDC dcMask;dcMask.CreateCompatibleDC(&dc);dcMask.SelectObject(bmpMask);dcImage.BitBlt(0,0,100,100,&m_dc,0,0,SRCCOPY);dc.BitBlt(10,10,100,100,&m_dc,0,0,SRCCOPY); //显示图1dc.BitBlt(120,10,100,100,&dcMask,0,0,SRCCOPY); //显示图2dcImage.SetBkColor(RGB(255,0,0));dcMask.BitBlt(0,0,100,100,&dcImage,0,0,SRCCOPY);dc.BitBlt(230,10,100,100,&dcMask,0,0,SRCCOPY); //显示图3dc.BitBlt(340,10,100,100,&dcImage,0,0,SRCCOPY); //显示图4dcImage.SetBkColor(RGB(0,0,0));dcImage.SetTextColor(RGB(255,255,255));dc.BitBlt(450,10,100,100,&dcImage,0,0,SRCCOPY);//显示图5dcImage.BitBlt(0,0,100,100,&dcMask,0,0,SRCAND);dc.BitBlt(10,120,100,100,&dcImage,0,0,SRCCOPY);//显示图6dc.BitBlt(120,120,100,100,&dcMask,0,0,SRCCOPY);//显示图7dc.SetBkColor(RGB(255,255,255));dc.BitBlt(230,120,100,100,&dcMask,0,0,SRCAND);//显示图8dc.BitBlt(230,120,100,100,&dcImage,0,0,SRCPAINT);//显示图8}
m_dc.LoadBitmap(IDB_BITMAP4); //加载原图,就是下面这张,由红,绿,黄组成的,白色的是背景,不算原图
CMemDC dcImage(100,100,&dc);//演示原理中一共用到了三个DC,DC就理解成一张画布,dcImage是一个临时DC,也可以理解成为一张100X100的临时画布,原图没有这么大,所以会露出背景;
CBitmap bmpMask;
CBitmap bmpMask;bmpMask.CreateBitmap(100,100,1,1,NULL); //创建一张单色位图,位图要想看到,必须画在画布上,也就是复制到(BitBlt)DC上CDC dcMask;dcMask.CreateCompatibleDC(&dc); //创建一张掩码用的画布dcMask.SelectObject(bmpMask); //把那张单色位图画在画布上dcImage.BitBlt(0,0,100,100,&m_dc,0,0,SRCCOPY); //m_dc这张画布上的原图COPY到临时画布dcImage上<pre name="code" class="cpp">dc.BitBlt(10,10,100,100,&m_dc,0,0,SRCCOPY); //在最终画布dc上显示原图dc.BitBlt(120,10,100,100,&dcMask,0,0,SRCCOPY); //在最终画布dc上显示单色掩码位图
dcImage.SetBkColor(RGB(255,0,0)); //把红色设置成dcImage这张画布的背景色,也就是透明色dcMask.BitBlt(0,0,100,100,&dcImage,0,0,SRCCOPY); //dcImage把自己复制给dcMask时,告诉他红色是背景色,dcMask只能显示两种颜色,所以dcImage上红色的地方变白色,其他地方是黑色dc.BitBlt(230,10,100,100,&dcMask,0,0,SRCCOPY); //显示dcMask这张画布dc.BitBlt(340,10,100,100,&dcImage,0,0,SRCCOPY); //显示显示dcImage这张画布
dcImage.SetBkColor(RGB(0,0,0)); //dcImage将黑色设置成背景色dcImage.SetTextColor(RGB(255,255,255));dc.BitBlt(450,10,100,100,&dcImage,0,0,SRCCOPY);//显示dcImage
dcImage.BitBlt(0,0,100,100,&dcMask,0,0,SRCAND);//dcImage与dcMask相与,注意此时dcImage的透明色是黑色,所以dcMask中的黑色到了dcImage上就成了透明色dc.BitBlt(10,120,100,100,&dcImage,0,0,SRCCOPY);//显示dcImagedc.BitBlt(120,120,100,100,&dcMask,0,0,SRCCOPY);//显示dcMask 第一张是原来的dcImage,第二张是dcMask,第三张是相与以后的dcImage
dc.SetBkColor(RGB(255,255,255));<span style="white-space:pre"></span>//最终画布dc的透明色设置成白色dc.BitBlt(230,120,100,100,&dcMask,0,0,SRCAND);//dcMask与最终画布相与dc.BitBlt(230,120,100,100,&dcImage,0,0,SRCPAINT);//dcImage与最终画布相或 第一张是dcMask,第二张是dcImage,第三张是最终效果
0 0
- MFC中透明位图原理
- MFC中实现位图的透明显示
- MFC透明位图显示函数
- 自定义MFC透明位图函数
- MFC 绘制透明背景位图
- 透明位图原理及代码
- MFC透明位图(1)--BMP的实现
- MFC透明位图(2)--PNG的实现
- MFC透明位图(2)--PNG的实现
- MFC透明位图(1)--BMP的实现 .
- MFC 绘制透明位图的方法
- MFC透明位图(1)--BMP的实现
- MFC透明位图(2)--PNG的实现
- MFC中位图按钮
- (半) 透明位图原理及代码
- 透明/半透明位图原理及代码
- (半) 透明位图原理及代码
- VC透明位图的实现原理
- 第二周项目四
- Bios工程师手边事—PCI资源分配
- RandomAccessFile类
- Hibernate框架的优缺点
- 3.ServletContext加载文件或通过类加载器加载资源文件
- MFC中透明位图原理
- XDOJ An Old Problem 水水水
- CDOJ 1070 秋实大哥打游戏
- CodeForces 3A Shortest path of the king(水题)
- 通过rsync实现远程容灾备份
- 欢迎使用CSDN-markdown编辑器
- 链表 最基本插入删除查找
- 百度工具:一个演示图片叠加及信息窗口的网址
- Codeforces 650A 数学简单题