C++ 设置透明背景图片

背景:
            有两个图片,一个是目标背景图片, 一个是带有自身背景色彩的彩色图片
            先将这彩色图片绘制到目标背景图片中, 这一步通过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,100,150,bmpInfo.bmWidth,bmpInfo.bmHeight,ImageDC.m_hDC,0,0,bmpInfo.bmWidth,bmpInfo.bmHeight,RGB(255,0,0)); // 设置红色为透明色 

BitBlt(pDC->m_hDC,0,0,bmpBkInfo.bmWidth,bmpBkInfo.bmHeight,bkDC.m_hDC,0,0,SRCCOPY); //画到屏幕上

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

时间: 2024-10-06 00:09:09

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

Visual Studio Code 设置透明背景图片

Visual Studio Code 设置透明背景图片 本方法不使用插件,直接添加代码修改VSCode本地的CSS文件来达到效果,诶原本想装个插件就可以优雅地敲C++,可试了好几个偶的VSCode就是不行. 1.按下Ctrl+Shift+P打开搜索栏,搜索默认配置文件Setting.json并打开 2.按下Ctrl+F快捷键搜索window.titleBarStyle并修改 "window.titleBarStyle": "custom", 3.打开VSCode目录

Android给TextView设置透明背景、圆角边框

第一种方法:在drawable文件夹下新建一个文件设置背景样式 代码: 在drawable文件夹下面新建text_view_border.xml [java] view plaincopy <?xml version="1.0" encoding="UTF-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <solid an

Android给TextView和EditText等控件设置透明背景、圆角边框

第一种方法:在drawable文件夹下新建一个文件设置背景样式 代码: 在drawable文件夹下面新建textviewborder.xml <?xml version="1.0" encoding="UTF-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="#80858

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

这两天想做一个五子棋游戏,想从零开始自己绘制各种图片素材,将经验心得整理如下. 制作透明背景图片: void MyPainter::DrawKit() { QImage image(30, 30, QImage::Format_ARGB32); memset(image.bits(), 0x00, image.byteCount()); // 绘制图片 QPainter painter(&image); painter.setPen(QPen(Qt::red, 2, Qt::SolidLine)

ios:设置视图背景图片的方法

1. 使用一个UIImageView实例做子视图,并且放最后面UIImageView *customBackgournd = [UIImageView alloc] initWithImage:[UIImage imageNamed:@"background.jpg"]];self.background = customBackground;[customBackground release]; [self addSubview:background];[self sendSubVie

Java Swing 之设置窗体背景图片

/** * 设置窗体背景图片 * @author gao */ package com.gao; import java.awt.Graphics; import java.awt.Image; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JPanel; public class BackgroundDemo extends JFrame{ private Image image; pri

[IOS]设置TabBar背景图片

Xcode6.1_IOS SDK 8.1 ********************************************************************** 在AppDelegate.m中设置TabBar背景图片 ********************************************************************** UITabBarController *tabBarController = [[UITabBarController

设置JFrame背景图片

这里我就放上改写的代码吧,不做多的解释,推荐一个好的博文 https://blog.csdn.net/jdsjlzx/article/details/16831815 1 public void ini_background() { 2 // 背景图片 3 ImageIcon background = new ImageIcon( 4 this.getClass().getResource("/img/登录背景.png")); 5 // 把背景图片显示在一个标签里面 6 JLabel

设置VS2017背景图片

设置方法很简单:安装扩展ClaudiaIDE 1.在这里下载扩展,https://visualstudiogallery.msdn.microsoft.com/9ba50f8d-f30c-4e33-ab19-bfd9f56eb817 2.然后双击即可完成安装. 之后重启VS,就可以看到编程背景上多了一个萌妹子,据说是一个日本人设计的VS虚拟形象,效果如下: 该插件的背景萌妹子图片位置在: C:\Users\{Username}\AppData\Local\Microsoft\VisualStud