背景:
            有两个图片,一个是目标背景图片, 一个是带有自身背景色彩的彩色图片
            先将这彩色图片绘制到目标背景图片中, 这一步通过BITBLT就可实现。   但实现后的效果是: 目标图片上,绘制上去的彩色图片带有其本身的背景。
           问题就来了, 我们想将彩色图片本身的背景去掉,应该如何解决?

解决方法:
          使用API函数:TransparentBlt   此函数将原DC中的图片绘制到目标DC中,并同时设置原图形在目标图形上的透明色。

BOOL TransparentBlt(
HDC hdcDest, // handle to destination DC
int nXOriginDest, // x-coord of destination upper-left corner
int nYOriginDest, // y-coord of destination upper-left corner
int nWidthDest, // width of destination rectangle
int hHeightDest, // height of destination rectangle
HDC hdcSrc, // handle to source DC
int nXOriginSrc, // x-coord of source upper-left corner
int nYOriginSrc, // y-coord of source upper-left corner
int nWidthSrc, // width of source rectangle
int nHeightSrc, // height of source rectangle
UINT crTransparent // color to make transparent
);

如本例中,将透明色设置为彩色图形自带背景色时, 则使用此函数后,所得最终图形上彩色图形的自身背景色就消除了。

CDC* pDC=GetDC(); 

CBitmap bmp;
bmp.LoadBitmap(IDB_BITMAP1); BITMAP bmpInfo;
bmp.GetObject(sizeof(BITMAP),&bmpInfo); CDC ImageDC;
ImageDC.CreateCompatibleDC(pDC); CBitmap *pOldImageBmp=ImageDC.SelectObject(&bmp); CBitmap bmpBK;
bmpBK.LoadBitmap(IDB_BITMAP2); BITMAP bmpBkInfo;
bmpBK.GetObject(sizeof(BITMAP),&bmpBkInfo); CDC bkDC;
bkDC.CreateCompatibleDC(pDC); bkDC.SelectObject(&bmpBK); TransparentBlt(bkDC.m_hDC,,,bmpInfo.bmWidth,bmpInfo.bmHeight,ImageDC.m_hDC,,,bmpInfo.bmWidth,bmpInfo.bmHeight,RGB(,,)); // 设置红色为透明色 BitBlt(pDC->m_hDC,,,bmpBkInfo.bmWidth,bmpBkInfo.bmHeight,bkDC.m_hDC,,,SRCCOPY); //画到屏幕上

原理: 通过设置掩码位图来实现
              1)首先建立掩码位图
              2)使用掩码位图作用于彩色原图,得到变异新图(透明色为黑,其他区域为原色)
              3)使用掩码位图与目标背景图相与 (透明区域为透明色,其他区域为黑色)
              4)使用变异新图与目标背景图相或  ,得到最终图

C++ 设置透明背景图片的更多相关文章

  1. Visual Studio 2017 设置透明背景图

    一.前言 给大家分享一下,如何为VS2017设置透明背景图.下面是一张设置前和设置后的图片. 设置前: 设置后: 二.设置背景图片的扩展程序 我们打开VS的扩展安装界面:[工具]->[扩展和更新 ...

  2. 网页中PNG透明背景图片的完美应用

    PNG 图片在网站设计中是不可或缺的部分,最大的特点应该在于 PNG 可以无损压缩,而且还可以设置透明,对于增强网站的图片色彩效果有重要的作用. 但为什么 PNG 图片却没有 GIF 和 JPG 图片 ...

  3. Qt 制作透明背景图片与裁剪图片(很实用)

    这两天想做一个五子棋游戏,想从零开始自己绘制各种图片素材,将经验心得整理如下. 制作透明背景图片: void MyPainter::DrawKit() { QImage image(30, 30, Q ...

  4. 设置VS2017背景图片

    设置方法很简单:安装扩展ClaudiaIDE 1.在这里下载扩展,https://visualstudiogallery.msdn.microsoft.com/9ba50f8d-f30c-4e33-a ...

  5. 设置JFrame背景图片

    这里我就放上改写的代码吧,不做多的解释,推荐一个好的博文 https://blog.csdn.net/jdsjlzx/article/details/16831815 public void ini_ ...

  6. vc下打印透明背景图片

    一.前言 刚接到个任务,要把带有透明背景的章子图片打印出来,开始觉得不是很简单吗,直接用vc自动生成的打印功能不就ok了.不过问题却不是想像的那么简单! 二.窗口中显示透明图片 在窗口中显示图片,可以 ...

  7. 设置按钮背景图片(HTML-CSS)

    很多人提交表单时都喜欢用一个图片来作为提交按钮,大多数人可能用JS去操作表单的提交,即当用户点击这个图片时响应一个JS来提交表单.其实还有一种方法,就是直接设置SUBMIT按钮的图片背景.设置它的图片 ...

  8. MFC 设置窗口背景图片

    //在Onpaint函数中加入如下代码 //----------给窗口设置背景图片---------------------------- CPaintDC dc(this); CRect myrec ...

  9. IOS 在IOS6中设置navigationBar背景图片 会有一条 黑色阴影 --- 解决方案

    //给navigationBar设置背景图片 if ([self.navigationController.navigationBar respondsToSelector:@selector(set ...

随机推荐

  1. escape()、encodeURI()、encodeURIComponent() 编码解码

    escape().encodeURI().encodeURIComponent()区别详解 JavaScript中有三个可以对字符串编码的函数,分别是: escape,encodeURI,encode ...

  2. python基础知识-(1)语法基础知识总结(转载)

    1.Python标识符 在 Python 里,标识符有字母.数字.下划线组成. 在 Python 中,所有标识符可以包括英文.数字以及下划线(_),但不能以数字开头. Python 中的标识符是区分大 ...

  3. web框架原理

    web框架的原理: 所有的web应用其实本质上就是socket服务端,而我们的浏览器就是socket客户端. 那么知道了这个之后我们就可以基于socket来写一个我们的服务端: import sock ...

  4. python-类里面各种方法的学习补充

    #-*- coding:utf-8 -*- #本次学习:类里面各种方法的学习 class SeniorTestingEngineer: work_year=3 salary=15000 def cod ...

  5. Nginx配置跨域请求“Access-Control-Allow-Origin”

    当出现403跨域错误的时候 No 'Access-Control-Allow-Origin' header is present on the requested resource,需要给Nginx服 ...

  6. tornado 和 djanjo 转义处理对比

    tornado tornado默认是转义所有字符,比较安全,但有时候我们的确需要把字符当做html来解析处理,因此我们需要做些处理. 所有的模板输出都已经通过 tornado.escape.xhtml ...

  7. uuid.uuid4().hex

    uuid.uuid4().hex .hex 将生成的uuid字符串中的 - 删除

  8. form表单的默认行为

    <form action=""></form> action 位空,默认提交数据到当前页.不知名method,默认为get方法 /?arg1=val1&am ...

  9. Linux 搜索日志信息

    在工作中我们经常要通过日志来查找问题,但有时候日志太多又不知道日志什么时候打印的,这时我们可以通过一下方法来查找: 1.进入到日志文件存放的目录下 2.grep  关键字  *    例如要查找多有有 ...

  10. jar 问题 : java.io.IOException: invalid header field

    通过本文, 我们明白了什么是 jar的清单文件 MANIFEST.MF, 简单示例: E:\ws\Test\WEB-INF\classes>jar cvfm testCL.jar ListTes ...