一、原理:

1.使用Bitblt函数将“屏蔽图”与背景图作AND运算.贴到目的地的DC中.

2.镂空的图与背景图作OR运算。贴到目的地的DC中

效果如图所示,中间的人物就是通过镂空添加上去的。

(屏蔽图)

屏蔽中间人物为黑色,屏蔽图与背景图作And运算

              000000---------------屏蔽图中的黑色部分

       (and)      110010---------------背景图中的色彩

            _____________________________

             000000----------------最后变成黑色

屏蔽四周为白色,与背景图做AND运算:

             111111----------------屏蔽图中的白色部分

        (and)   110010----------------背景图中的色彩

------------------------------------------

             110010-----------------对原来背景图没有影响,

将镂空的图与背景图做OR运算

      图片人物为彩色

011101-----------------人物图的色彩 屏蔽图中的彩色人物

          (OR) 000000-----------------背景图中的黑色部分

            ---------------------------

              011101------------------黑色部分变成彩色人物的颜色

        图片人物为黑色

000000------------------人物图案四周的黑色部分。

(OR)    110010------------------背景图的色彩

--------------------------

110010-------------------背景图中的色彩.

Frame::Frame()
{Create(NULL,"绘图窗口");CClientDC dc(this);int width = dc.GetDeviceCaps(HORZRES);int height = dc.GetDeviceCaps(VERTRES);GetWindowRect( &rect );width = ( width - ( rect.right - rect.left ))/2 ;height = (height - (rect.bottom - rect.top ))/2 ;MoveWindow( width , height , (rect.right - rect.left ) , (rect.bottom - rect.top ) ,true);GetClientRect(&rect); mdc = new CDC;        //建立一内存DC mdcbitmap = new CBitmap; //建立源位图bgbmp = new CBitmap;  //建立背景图mdc->CreateCompatibleDC(&dc); //将mdc转换成与dc相容的DCbgbmp->m_hObject = (HBITMAP)::LoadImage(NULL,"bground.bmp",IMAGE_BITMAP,rect.right,rect.bottom,LR_LOADFROMFILE); //载入背景图文件bitmap->m_hObject = (HBITMAP)::LoadImage(NULL,"man.bmp",IMAGE_BITMAP,208,154,LR_LOADFROMFILE); //载入来源位图文件
}Frame::~Frame()
{delete mdc;delete bitmap; delete bgbmp;
}BEGIN_MESSAGE_MAP(Frame, CFrameWnd)//ON_WM_CREATE()ON_WM_PAINT()//ON_LBN_SELCHANGE(ID_LIST,OnSelChange)
END_MESSAGE_MAP()// Frame 消息处理程序void Frame::OnPaint()
{CPaintDC dc(this);         //建立响应WM_PAINT消息的DCmdc->SelectObject(bgbmp);  //取得背景图dc.BitBlt(0,0,rect.right,rect.bottom,mdc,0,0,SRCCOPY); //贴上背景图mdc->SelectObject(bitmap); //取得源位图dc.BitBlt(500,300,104,154,mdc,104,0,SRCAND); //将屏蔽与背景图做AND运算dc.BitBlt(500,300,104,154,mdc,0,0,SRCPAINT);//将要透空的图与背景图做OR运算
}

  

转载于:https://www.cnblogs.com/WilliamJiang/archive/2011/10/26/2225313.html

VC游戏开发-图片镂空相关推荐

  1. 【VC++游戏开发#三】2D篇 —— 游戏之一:空中大战(SpaceWar)

    本文由BlueCoder编写   转载请说明出处: http://blog.csdn.net/crocodile__/article/details/13505997 我的邮箱:bluecoder@y ...

  2. 干货:Unity游戏开发图片纹理压缩方案

    原文链接:http://www.jianshu.com/p/f7c3741f22af Unity3d引擎对纹理的处理是智能的:不论你放入的是PNG,PSD还是TGA,它们都会被自动转换成Unity自己 ...

  3. 【VC++游戏开发】智力游戏——鸡蛋里挑骨头(仿扫雷)

    在我学习游戏开发的过程中,遇到的最大的麻烦就是不知道一个游戏的完整实现过程,代码倒是其次. 这里,总结一下我做过的游戏,主要是梳理整每个步骤. 先看下最终的效果 第1步,准备素材图片 包括鸡蛋.骨头, ...

  4. 【VC++游戏开发#六】2D篇 —— 粒子系统(一):浪漫唯美的场景之雪花飞舞

    本文由BlueCoder编写   转载请说明出处: http://blog.csdn.net/crocodile__/article/details/16887511 我的邮箱:bluecoder@y ...

  5. 【VC++游戏开发#九】2D篇 —— 粒子系统(二):平安夜特别版——星光四射

    本文由BlueCoder编写   转载请说明出处: http://blog.csdn.net/crocodile__/article/details/17510463 我的邮箱:bluecoder@y ...

  6. 【VC++游戏开发#二】2D篇 —— 平滑的幻灯片放映效果

    本文由BlueCoder编写   转载请说明出处: http://blog.csdn.net/crocodile__/article/details/12975077 我的邮箱:bluecoder@y ...

  7. 【转】Unity游戏开发图片纹理压缩方案

    http://blog.csdn.net/goodai007/article/details/52679333 转载于:https://www.cnblogs.com/xxxianhongfeng/p ...

  8. 【ANDROID游戏开发十六】ANDROID GESTURE之【触摸屏手势识别】操作!利用触摸屏手势实现一个简单切换图片的功能!...

    本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/android-game/337.html - ...

  9. 【源码+图片素材】Java王者荣耀游戏开发_开发Java游戏项目【王者荣耀】1天搞定!!!腾讯游戏_Java课程设计_Java实战项目_Java初级项目

    王者荣耀是当下热门手游之一,小伙伴们是否想过如何制作一款属于自己的王者荣耀游戏呢? 本课程讲解了一个王者荣耀游戏的详细编写流程,即使你是刚入门Java的新手,只要你简单掌握了该游戏所需要的JavaSE ...

最新文章

  1. Linux的top命令
  2. WinAPI: Pie - 绘制饼图
  3. java 缓存接口,java项目中,针对缓存问题的处理方式【接口中的处理方式】
  4. oracle 11g exp 报错 EXP-00056;ORA-12154;EXP-00000;
  5. 信息学奥赛一本通 2040:【例5.7】筛选法找质数 (普通筛 线性筛)
  6. CMake和Make——简介和对比
  7. 小tips:善用页面的base类
  8. 正在使用的项目,项目名那里出现了红色感叹号?怎么去除?
  9. 大规模业务技术架构设计与战术(架构师必看)
  10. 在QTP中巧用WebTable对象的ChildItem方法进行测试
  11. mysql数据库基本知识
  12. rapidxml学习记录
  13. 计算机网络(三)物理层
  14. 超市微信小程序怎么做_小程序怎么做的 超市微信小程序怎么做
  15. 如何用c语言统计字符个数,C语言统计字符个数代码分享
  16. Android中文按拼音排序
  17. 详述GPS原理及RTK技术应用
  18. 此windows7副本不是正版、黑屏7601的解决办法
  19. Maya2011下载 (破解正式版)
  20. python macd底背离_MACD的“底背离”狠不狠?回测告诉你结果

热门文章

  1. android 快速拍照,0.3秒快速对焦 不将就一加手机拍照评测
  2. 十六、数字图像处理之图像分割
  3. 如何使用Lighthouse性能检测工具
  4. ubuntu下安装的php没有curl扩展,ubuntu下php怎么安装curl扩展?
  5. 2020.7.16 bug总结 第二周 (转载篇)
  6. ASP.NET 生成二维码(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
  7. potplay录制摄像头视频
  8. 创业潭第十期:创始人是天生的
  9. macOS 快速清空信息(iMessage)内容及修复信息数据库更新中解决方法
  10. 人工智能项目的开发流程概述