windows编程笔记【十】透明背景效果

在Qt中设置窗体背景颜色及透明度的方法 本文主要介绍在Qt中设置窗体背景颜色及透明度的方法。 阅读详情

图片都是以四方格储存的,如果要把他贴到背景图上,就会这样: 

 可是对于LoadImage()是不支持png这类带有透明通道的图片的,如果不用其他的库,如GDI+,怎么实现背景透明呢?

原理如下:

我们使用一个贴图来去掉黑色背景

左边是 要去背并且贴到背景上的前景图,右边黑边称之为屏蔽图,在透明过程会用到他。

  1. 将屏蔽图于背景图做 “AND” 运算,贴到目标DC中
  2. 将上一步处理后的图片和前景图做 “OR”运算,贴到目的地DC中。

 

为什么这两步就能产生透明呢,来阐述一下究竟发生了什么:

and运算是两数都为1,即为1,其他都是0:1&1=1; 1&0=0; 0&1=0; 0&0=0;

屏蔽图黑色部分与背景彩色部分and运算后都变成黑的。

 

屏蔽图白色部分和背景图彩色部分and后还是彩的。

第一步效果如下:

步骤2:or运算:0&0=0、0&1=1、1&0=1、1&1=1

效果如下:

 

代码如下:

void MyPaint(HDC hdc)
{	
	SelectObject(mdc, hbmp);  
	BitBlt(hdc, 0, 0, 600, 450, mdc, 0, 0, SRCCOPY); //显示背景图

	SelectObject(mdc, bg);
	BitBlt(hdc, 50, 50, 85, 99, mdc, 85, 0, SRCAND); //SRCAND为AND运算
	BitBlt(hdc, 50, 50, 85, 99, mdc, 0, 0, SRCPAINT); //SRCPAINT为OR运算
}

BOOL InitInstance(HINSTANCE hinstance)
{
	HWND hwnd;
	HDC hdc;
	if (!(hwnd = CreateWindowEx(NULL,
		"WINCLASS1",	//winclass.lpszClassName设置的字符,是类的别名。
		"YouWindows",	//窗口的名称
		WS_OVERLAPPEDWINDOW | WS_VISIBLE,	//一些窗口属性
		0, 0,			//窗口位置
		600, 450,		//窗口宽高
		NULL,			//父窗口句柄
		NULL,			//附属窗口句柄
		hinstance,		//WinMain第一个实参,程序句柄。
		NULL			//null就可以了
	)))
		return false;
//上边是窗口函数,无关

	hdc = GetDC(hwnd);
	mdc = CreateCompatibleDC(hdc);
	hbmp = (HBITMAP)LoadImage(NULL, "无标题.bmp", IMAGE_BITMAP, 600, 450, LR_LOADFROMFILE); //载入背景图
	bg = (HBITMAP)LoadImage(NULL, "1333765851_1860.bmp", IMAGE_BITMAP, 170, 99, LR_LOADFROMFILE); //载入前景图和屏蔽图,他们是一张。
	MyPaint(hdc);
	ReleaseDC(hwnd, hdc);
	return true;
}

 注意!以上代码屏蔽图和前景图是一张,只是用了两个不同的位置载入而已。

 

BitBlt(hdc, 50, 50, 85, 99, mdc, 85, 0, SRCAND); //屏蔽图x轴85像素做AND运算
BitBlt(hdc, 50, 50, 85, 99, mdc, 0, 0, SRCPAINT); //前景图在x轴0像素开始做OR运算

 

效果如下:

Visual C++游戏编程基础之透明半透明效果 一、基本思路 1.半透明的原理 一张位图由许多像素组成,而每一像素包含R、G、B三原色,三原色的值决定了像素的色彩,要实现半透明效果,需要把前景图 和背景图彼此对应的像素颜色按某一比例进行调配,称为 ‘不透明度’,直接贴图,则前景图不透明度为100%,背景图为0%; 公式:半透明图色彩=前景图色彩 * 不透明度 + 背景图色彩 * (1-不透明度) 2.半透明操作步骤 ... 阅读详情

相关推荐

QtWidget 设置背景透明方法汇总【转】

QtWidget 设置背景透明方法汇总【转】 QT QWidget设置窗体透明度方法汇总 发表于3年前(2012-12-30 15:54) 阅读(992)|评论(0)0人收藏此文章,我要收藏 赞0 1、设置窗体的背景色 在构造函数里添加代码,需要添加头文件qpalette或qguiQPalette pal...

bianchengjingling22的博客 2233

as3 关于加载透明图片

可以被FLASH动态加载的背景透明图片大致就GIF,PNG两种先说说GIF图片,用普通的加载方法加载GIF图片完后只能看到动态图片的第一帧,由动态图变成静态的了所幸有达人完美解决了这个问题,并封装好类供我们使用,这就是GIFPlayer。下载地址网上搜一下很多,要找不到也可以找我要GIFPlayer使用示例package{ /*  QQ: 334973991  */

xiaoniba1024的专栏 1382

wince(windows mobile) 中win32 实现带透明背景的贴图按钮

在wince中也看到别人实现过贴图按钮,但多数是在MFC中继承CButton类实现的,很少有在Win32中直接实现的,在前人基础上写了个ImageButton类可以完成该功能,纯Win32实现的。       主要是实现描述如下:       首先是创建按钮,位置上可以是RECT型参数也可也是,(x,y,iWidth,iHeight)形式的参数。因为是贴图按钮,所以需要加上BS_OWNERDR

dream的专栏 6559

C++如何加载PNG透明图片作为菜单项的图标

HBITMAP LoadImageFromResource(UINT nResourceId, LPCTSTR pszResourceName/* = "PNG"*/) { HBITMAP hBitmap = NULL; HINSTANCE hInstance = AfxGetResourceHandle(); HRSRC hRsrc = ::FindResource (hInstan...

dawuafang 705

Windows编程:实现GDI文字输出背景透明技术

图形设备接口(GDI)是Windows操作系统中的一套用于绘制图形的应用程序编程接口(API)。它作为操作系统和显示设备之间的抽象层,让开发者能够以与设备无关的方式编写代码,以实现图形绘制,如线条、形状、文本、图像处理等。ExtTextOut是Windows GDI中用于高质量文本输出的函数,它提供了许多扩展特性,超出了简单文本绘制的范畴。下面是ExtTextOut的基本函数声明:HDC hdc, // 设备上下文句柄int X, // 文本输出的起始X坐标。

weixin_35516624的博客 794

Windows编程中透明控件与PNG背景的实现技巧

PNG(Portable Network Graphics)格式是一种无损压缩的位图图形格式,它广泛应用于网络图像。PNG格式的特点之一就是采用了无损压缩技术,这意味着在图像压缩和解压缩过程中不会损失任何图像信息,从而保证了图像质量的完整性。在无损压缩技术中,PNG使用了一种叫做Deflate算法的压缩方式。Deflate算法结合了LZ77算法(一种基于字典的压缩算法)和霍夫曼编码(一种变长编码方法)的特点。

weixin_36288992的博客 471

MFC中CImage类显示的半透明PNG存在的问题以及处理方法

在MFC中自己也做过很多关于如何

lixiang987654321的专栏 8725

下载图片loadImage

下载图片loadImage

把bmp图片的白色区域转化称透明

  HBITMAP hbmp,   hmask; //图象及掩码句柄     int w,   h; //图片宽和高         void   Bitmap::Load(char   *fn) //加载图片     {     DeleteObject(hbmp); //清空句柄     hbmp=(HBITMAP)LoadImage(     NULL,     fn, //完整文件路径  

浪的专栏 3431

Delphi开发者必备:CEF4Delphi跨平台浏览器嵌入实战指南(含Lazarus适配)

本文详细介绍了Delphi开发者如何利用CEF4Delphi实现跨平台浏览器嵌入,包括环境配置、Lazarus适配、ARM架构优化及Firemonkey集成等实战技巧。通过Chromium引擎的强大功能,开发者可以轻松为传统桌面应用添加现代浏览器特性,提升多平台开发效率。

weixin_29233333的博客 229

实战指南:如何用DCCRN模型提升语音增强效果(附代码示例)

本文提供了基于DCCRN模型进行语音增强的实战指南。通过深入解析复数网络如何协同处理语音的幅度与相位信息,并附有完整的PyTorch代码实现,帮助开发者从数据准备、模型搭建到训练调优,构建高效的实时语音增强系统,有效提升嘈杂环境下的语音清晰度。

weixin_29054245的博客 479

MFC加载带有透明通道的png图片(两种方法)

【原文】http://blog.youkuaiyun.com/zhongbin104/article/details/8730935

踏莎行的博客 9262

国赛数学建模高教社杯历届优秀论文全集

包含了2004到2023年高教社的赛题及优秀论文。

BanDeng001的博客 3288

将图片背景设置为透明的方法

现有一张背景图为蓝色的png格式图片,如下图所示:下面介绍将该图片的背景设置为透明的方法。1. 使用“画图 3D”应用程序打开该图片;2. 在“画图 3D”界面中,点击“神奇选择”按钮(该操作默认会选择整个图片);3. 点击界面右侧的“下一步”;

liitdar的博客 3万+

字节跳动程序媛教你如何刷算法题:面试手撕代码我就没怕过

本人上一次刷题还是大一的C语言期末考试……但是面试中算法考核截止上岸前一直保持着100%正确率的光辉记录。 本文将给你指明一条刷题的决胜指南。并从算法的重要性、题库的选择以及刷题的三大步骤分别进行讲解,彻底解决你所有关于面试算法所有的困扰。

Stay Hungry Stay Foolish 求知若饥 虚心若愚 2万+

机器人系统能用MQTT5.0代替ROS2吗?

更为灵活和友好的方案是通过把ROS(Robot Operating System)与MQTT(Message Queuing Telemetry Transport)协议相结合的解决方案,利用MQTT的轻量级、跨平台和广泛适用性特点,扩展ROS系统的通信能力,或将非ROS系统接入ROS网络。

QzmAIoT 2164

Winform窗体程序 实现TextBox背景透明,水印提示,背影半透明效果

效果图: 新建一个FormLogins窗体 项目添加BaseTextBox 类库 在此类库下建立一个TextBox1类,实现背景透明效果和水印效果 using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Linq; using System.Runtime.InteropServices; using System.Te

build2024 5461

【Envi遥感图像处理】022:envi时空分析工具的使用

本文介绍了ENVI软件中的时空分析工具应用,以美国拉斯维加斯1975-2014年的9期Landsat数据为例。主要内容包括:1)时空分析概念,即对空间相关时间序列数据的建模分析;2)构建时序数据流程,通过添加栅格、时间排序等步骤生成.series格式时序文件;3)时序数据查看方法,包括动画播放、添加注记及保存视频;4)多源数据统一处理工具,解决坐标系、空间范围不一致问题。该工具可用于冰川变化、植被覆盖等时空变化研究。

智慧空间实验室 271

Windows界面编程-背景图片、透明特效使用

Windows界面编程第一篇 位图背景与位图画刷     可以通过WM_CTLCOLORDLG消息来设置对话框的背景,MSDN上对这个消息的说明如下: The WM_CTLCOLORDLG message is sent to a dialog box before the system draws the dialog box. By responding to this message,

6342

[QMT量化交易小白入门]-104、QMT平台运行深度学习模型,预测期货价格

本专栏主要是介绍QMT的基础用法,常见函数,写策略的方法,也会分享一些量化交易的思路,大概会写100篇左右。QMT的相关资料较少,在使用过程中不断的摸索,遇到了一些问题,记录下来和大家一起沟通,共同进步。

木头大左的博客 486

SAP_SD模块路径及运输功能后台配置简介

后台路径:SPRO—后勤执行—装运—基本发运功能—定义路线—定义传输模式根据实际运输过程运输地理的类型:海运、公路运输、空运后台路径:SPRO—后勤执行—装运—基本发运功能—定义路线—定义发运类型根据实际运输过程运输方式:汽车、卡车、火车、轮船、飞机后台路径:SPRO—后勤执行—装运—基本发运功能—路径—定义路线—定义运输连接点指在运输过程中需要中转的地区可以维护中转地区的停留的时间后台路径:SPRO—后勤执行—装运—基本发运功能—路径—定义路线—定义路径和阶段。

我小时候很黑的博客 1400

Slint UI 在 Windows 11 上实现透明背景与毛玻璃效果的技术解析

Slint 是一个现代化的用户界面工具包,旨在为嵌入式设备和桌面应用提供高效的UI解决方案。在 Windows 11 操作系统中,微软引入了全新的视觉效果系统,包括 Mica 和亚克力(Acrylic)等毛玻璃材质效果。本文将详细介绍如何在 Slint UI 中实现窗口透明背景并应用 Windows 11 特有的视觉效果。 ## 技术实现原理 在 Windows 11 上实现透明窗口效果需要结...

gitblog_00355的博客 736

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

关于Windows Paint的基础图层透明背景的操作说明

背景 草图应用后期方法纪要! 问题 如何在Windows的Paint工具中透明图层的应用? 说明 在利用Windows自带的Paint完成一些基础草图时,无法选择透明背景的图层数据。如下图: 上面的图例中,画了一个基础椭圆,然后复制了一份以作修改,原图作为参考位。然后接下来在修改的椭圆图例上继续复制一份,当把复制的图层再画在画图上时,此时挪到修改图例上后会发现其有一层白色背景。而我们理想状态是我复制时就仅仅只是复制这个椭圆图层。而不是把整个...

大雷 5766

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

关于利用Windows的Paint 3D制作透明背景图片的说明

背景 项目应用中需要对部分不同规格的图片进行统一修正,例如图片尺寸,比例,占位,涂层处理等,为了方便快捷高效的处理此类问题,特此纪要! 问题 如何利用Windows的Paint 3D制作透明背景图片? 说明 对于图片、视频等文件的处理工具市面上有很多好用的工具。例如:PhotoShop等。 对于一些没有这方面修复经验的人群,但是又有处理简单动作需要的时候,这个时候就需要一个轻量的应用来快速的帮你解决类似的问题。 ...

大雷 6931

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Slint 窗口透明背景 3 步实现 Windows 11 毛玻璃效果

改完下面 3 处代码,你的 Rust + Slint 应用在 Windows 11 上就有一扇能透出桌面壁纸的窗口:底色全透明,背后自动铺上系统级的 Mica 或亚克力(Acrylic,一种高透模糊材质)。这套 Slint 透明背景 + Windows 11 毛玻璃效果的组合,原理不复杂,动手更快。 ## 成品长这样:先建立画面感 [![Slint 透明背景窗口与 Windows 11 毛玻璃

gitblog_00267的博客 854

Windows界面编程第五篇 静态控件背景透明化

上一篇《Windows界面编程第三篇 异形窗体 普通版》和《Windows界面编程第四篇异形窗体 高富帅版》介绍了异形窗口(异形窗体)的创建,并总结出了异形窗口的“三要素”:1.WS_EX_LAYERED属性2.指定透明色3.以位图为窗口背景     本篇文章将主要介绍Windows编程中如何实现静态控件背景的透明化,这将进一步的美化界面。下面先看一张没有做静态控件背景透明化的对话框程序的运行画面

MoreWindows Blog 2万+
上一篇: windows编程笔记【九】使用图片资源
下一篇: c随机生成四种区间的方式
崔佳宇_
崔佳宇_ 优质创作者: 嵌入式与硬件开发技术领域 优质创作者: 嵌入式与硬件开发技术领域
博客等级 码龄10年 1万+粉丝 173原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值