EasyX 框架实现透明图片显示的 trick
2017-02-16 19:44
274 查看
看到的一篇无敌好的文章!!!
EasyX 框架实现透明图片显示的 trick
2016-2-17WED 04:45
小技术►C
很多学校教授 C++ 图形编程时,为了规避 Windows 下 VC++ 较为复杂的绘图 API,都会(强制)要求学生使用 EasyX 这一绘图框架。该框架十分简陋地实现了初学者所需的图形功能。同时,此框架也存在大量不足,最为不便的就是不支持
png 格式图片,不支持透明背景绘图。
鉴于此框架的 putimage 函数支持三元光栅操作码,我们可以利用掩码位图来变相实现透明背景绘图。
参考了 http://code.qtuba.com/article-15636.html
1. 创建一个掩码位图
掩码位图是一个单色位图,它的黑色部分就是位图显示时要保留的部分,白色部分就是要透明的部分。这里使用马里奥举例:原图:
掩码图:
2.把掩码位图用SRCINVERT(XOR)方式叠加到原图
白色XOR白色=黑色(白色的RGB都是255,1^1=0),黑色XOR任何颜色=原颜色(0^0=0,0^1=1)。操作完成后原图的透明区应被黑色填充。也可以直接用黑色填充原图。
3.把掩码位图用SRCAND(AND)方式叠加背景中
白色and任何颜色=原颜色(1&1=1,1&0=0),黑色and任何颜色=黑色(0&0=0,0&1=0)。
4.把叠加过的原图用SRCPAINT(or)方式叠加到背景中
黑色or任何颜色=原颜色(0|1=1,0|0=0)。代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #include <iostream> #include <graphics.h> using namespace std; int main() { initgraph(800, 600); // Load background loadimage(NULL, _T("img\\background.jpg")); // Load mario IMAGE mariox, mario; loadimage(&mariox, _T("img\\mariox.bmp")); loadimage(&mario, _T("img\\mario.bmp")); // Trick to display transparent image SetWorkingImage(&mario); putimage(0, 0, &mariox, SRCINVERT); SetWorkingImage(NULL); putimage(400, 465, &mariox, SRCAND); putimage(400, 465, &mario, SRCPAINT); getchar(); closegraph(); return 0; } |
相关文章推荐
- C#怎样实现窗体透明而控件不透明,或者就是怎样无窗体显示图片,就像圣诞那样的程序,不吝赐教!
- 如何实现文字加透明背景显示在一张图片的底部的效果
- Qt 中如何实现对图片设置透明色显示 .
- 用Qt实现窗体的无边框、可移动、透明不规则显示(需背景透明的图片)
- 使用自定义的item、Adapter和AsyncTask、第三方开源框架PullToRefresh联合使用实现自定义的下拉列表(从网络加载图片显示在item中的ImageView)
- js和css两种实现鼠标经过图片时显示透明框的遮罩条文字
- Qt 中如何实现对图片设置透明色显示
- CSS实现Div透明,而显示在上面的文字不透明,但也可看到显示在下面的图片内容
- 使用自定义的item、Adapter和AsyncTask、第三方开源框架PullToRefresh联合使用实现自定义的下拉列表(从网络加载图片显示在item中的ImageView)
- 如何实现透明遮挡层显示图片
- 用Qt实现窗体的无边框、可移动、透明不规则显示(需背景透明的图片)
- Android 通过开源框架实现加载网络图片并下载到SD卡通知系统相册显示,(并实现分享图片功能)
- ie6实现png图片透明显示的方法
- Qt 中如何实现对图片设置透明色显示 .
- [VB.NET].NET精简框架下用VB.NET怎么实现在picturebox上显示不同图片???
- 让IE显示透明的PNG图片
- 用C#实现图片数据库存储与显示
- [导入]xml应用(2): 通过向xsl传递参数+数据岛方式,实现在客户端单个xml的分框架显示
- js实现图片等比缩略显示 支持IE/FF
- HTML显示默认图片实现