内存dc和颜色遮罩的使用
来源:互联网 发布:我知谁掌管明天基督教 编辑:程序博客网 时间:2024/05/27 01:18
绝对参考文章http://blog.csdn.net/xiangsimoyinjiu/article/details/51001784,哇,博主说未经允许,不准转载。。。
原来是想做什么呢?是想独立创建一个图层,背景好比是白色,那我用红色作画,最后能略去白色,直接将绘图显示到下面图层(可见)。但是,失败了好像。但是学习到了一点颜色遮罩的使用。
先贴代码:
CDC *m_PrimaryMemDC =new CDC;m_PrimaryMemDC->CreateCompatibleDC(&dc);
CDC *m_TempMemDC = new CDC ;m_TempMemDC->CreateCompatibleDC(&dc);
CDC *m_dcMask = new CDC;m_dcMask->CreateCompatibleDC(&dc);OnDraw:
m_PrimaryMemDC->SelectObject(m_bitmap1);//将之前已经装载好的一个位图选入内存dc
m_TempMemDC->SelectObject(m_bitmap2);BITMAP bitmap1,bitmap2;m_bitmap1->GetBitmap(&bitmap1);//颜色遮罩层CBitmap bmpMask;bmpMask.CreateBitmap(100,100,1,1,NULL);m_dcMask->SelectObject(&bmpMask);m_TempMemDC->BitBlt(0,0,bitmap1.bmWidth,bitmap1.bmHeight,m_PrimaryMemDC,0,0,SRCCOPY);//显示bitmap1pDC->BitBlt(0,0,bitmap1.bmWidth,bitmap1.bmHeight,m_PrimaryMemDC,0,0,SRCCOPY);//显示单色位图pDC->BitBlt(200,10,100,100,//m_rect.Width(),m_rect.Height(),m_dcMask,0,0,SRCCOPY);m_TempMemDC->SetBkColor(RGB(255,0,0));//这里将dc背景色设为红色,当将他copy到mask层的时候,//使得mask层对于红色就变成白色,而其他颜色就是黑色m_dcMask->BitBlt(0,0,100,100,m_TempMemDC,0,0,SRCCOPY);
//显示用pDC->BitBlt(310,0,100,100,//m_rect.Width(),m_rect.Height(),m_dcMask,0,0,SRCCOPY);pDC->BitBlt(420,0,100,100,//m_rect.Width(),m_rect.Height(),m_TempMemDC,0,0,SRCCOPY);m_TempMemDC->SetBkColor(RGB(0,0,0));m_TempMemDC->SetTextColor(RGB(255,255,255));//pDC->BitBlt(0,210,100,100,m_TempMemDC,0,0,SRCCOPY);m_TempMemDC->BitBlt(0,0,100,100,m_dcMask,0,0,SRCAND);//在这里大胆的猜测:m_TempMem中被m_dcMask白色部分覆盖的应该与上背景色//被黑色部分(透明部分覆盖的应该与上前景色)
//即m_TempMemDC中的红色区域被m_dcMask中的白色遮住的部分与上背景色成为黑色
//而被黑色遮住的部分与上前景色保留原来的颜色
//显示用pDC->BitBlt(300,210,100,100,m_TempMemDC,0,0,SRCCOPY);pDC->BitBlt(410,210,100,100,m_dcMask,0,0,SRCCOPY);pDC->SetBkColor(RGB(255,255,255));pDC->BitBlt(0,320,100,100,m_dcMask,0,0,SRCAND);pDC->BitBlt(0,320,100,100,m_TempMemDC,0,0,SRCPAINT );显示一下最终图片:
然后最后大胆感觉了一下,颜色遮罩还是只能对付一个图层,就好像字面的意思一样,遮住颜色。好比遮住红色,显示其他颜色,总得用一个颜色去替换被遮住的颜色。(猜的)
不过这样的话,也可以先将一个位图先copy到另一个位图上,再通过颜色遮罩来处理显示。不过这样感觉不能一劳永逸。
哈哈,菜鸟一枚,大神勿开喷
阅读全文
0 0
- 内存dc和颜色遮罩的使用
- 内存DC和屏幕DC
- 内存DC和屏幕DC
- 内存DC和屏幕DC
- 内存DC与CBitmap的使用
- 内存DC与CBitmap的使用
- 内存DC也有视口和窗口的
- MFC 改变窗体颜色 颜色渐变 内存DC CPaintDC
- 有关内存DC和双缓冲位图的问题汇总
- 调用CreateCompatibleBitmap建立内存DC只有两种颜色的问题
- 内存DC,CBitmap的问题
- 各种DC的使用
- LDO和DC-DC器件的区别
- DC-DC和LDO的区别
- DC/DC和LDO的区别
- LDO和DC-DC器件的区别
- LDO和DC-DC器件的区别
- DC/DC和LDO的区别
- 169. Majority Element
- 当你老了,回顾你的一生,你兴奋吗?
- leetcode 88. Merge Sorted Array
- SQL Server中使用表类型参数批量添加和修改的存储过程
- android编译
- 内存dc和颜色遮罩的使用
- 清醒么,少年
- 【读书】--《哪有没时间这回事》
- 《麦肯锡精英的48个工作习惯》书评
- MarkDown编辑器的使用心得
- import
- Fast I/O
- 爬取腾讯招聘scrapy框架实现,并以(表格,json)形式存储到本地
- 软件工程|