java bmp透明底色_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)使用变异新图与目标背景图相或 ,得到最终图
以上所述就是本文的全部内容了,希望大家能够喜欢。
java bmp透明底色_C++ 设置透明背景图片相关推荐
- html给按钮设置背景,设置按钮背景图片(HTML-CSS)
很多人提交表单时都喜欢用一个图片来作为提交按钮,大多数人可能用JS去操作表单的提交,即当用户点击这个图片时响应一个JS来提交表单.其实还有一种方法,就是直接设置SUBMIT按钮的图片背景.设置它的图片 ...
- Jtabbedpane设置透明、Jpanel设置透明
摘自 https://zhidao.baidu.com/question/983204331427010139.html java中如何设置Jtabbedpane为透明 20 在Jtabbedpane ...
- java中窗体背景图片_Java Swing 之设置窗体背景图片
/** * 设置窗体背景图片 * @author gao */ package com.gao; import java.awt.Graphics; import java.awt.Image; im ...
- MFC_设置对话框背景图片
MFC 设置对话框背景图片2010年08月06日 20:12MFC 设置对话框背景图片 基于VC6.0 (一) 在对话框类名上右键àAddWindows Message Handlerà为消息WM_P ...
- Swing设置窗体背景图片
Swing设置窗体背景图片,简单的实现方法就是在窗体中放在一个JLabel标签组件,然后设置该标签的图标属性,最后设置该标签的大小与位置将其铺满窗体. // 设置背景 JLabel lblBackgr ...
- 自定义背景android,Android自定义Button并设置不同背景图片的方法
本文实例讲述了Android自定义Button并设置不同背景图片的方法.分享给大家供大家参考,具体如下: 1.自定义MyButton类 public class MyButton extends Bu ...
- Fulutter 设置圆角背景图片Container 设置边框、圆角、阴影
Fulutter 设置圆角背景图片&Container 设置边框.圆角.阴影 在 Flutter 中,如何实现背景图片呢?又如何实现带圆角的背景图片呢? Fulutter 设置圆角背景图片 使 ...
- Qt 设置窗口背景图片的几种方法实例
1.在paintEvent事件中绘制图片 void Widget::paintEvent(QPaintEvent * ev) {QPainter painter(this);painter.drawP ...
- Qt之QWidget设置窗口背景图片的几种方法
Qt之QWidget设置窗口背景图片的几种方法 几种方法如下: 1.使用调色板QPalette来设置图片 QPalette pal =this->palette(); pal.setBrush( ...
- css设置MP4背景图片
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.实现代码 二.效果图 前言 想设置动态背景图片,网上查了一下,想通过MP4这种方式实现一下. 一.实现代码 htm ...
最新文章
- XamarinSQLite教程添加列
- 计算机作文1500字,写科技的作文1500字
- 关于微机开操作票的研究22437
- 堆排序分析(大根堆为例,由小到大排序)
- QML和C ++之间的数据类型转换---枚举
- Thymeleaf 语法快速入门
- java浮点数原理,浮点型数据存储原理
- 转:Windows Phone 7 设计简介
- flatpickr功能强大的日期时间选择器插件
- 不熟悉产品业务,做不好前端开发!
- pytorch经常使用的代码(持续更新)
- python全局变量被覆盖的问题
- 搭建一个wordpress
- 自定义NodeJS-C++ Addons使用说明
- MySQL-Front设置中文
- 进阶EXCEL:开发工具的组合框
- 如何提高技术团队协作能力
- 1.GraspNet-API之Grasp Lable Format
- C#毕业设计——基于C#+asp.net+C++的RSA文件加密系统设计与实现(毕业论文+程序源码)——RSA文件加密系统
- Linux 中计划任务把结果发送到你的邮箱