绘制“透明”位图

Transparent Bitmap实现透明的位图(7KB) 立即下载
绘制“透明”位图是指绘制某一位图中除指定颜色外的其余部分,我们称这种颜色为“透明色”。通过将位图的背景色指定为“透明色”,在绘制时,不绘制这部分背景,而仅绘制图像,这样就可以将位图中图像透明地绘制到窗口上。

  绘制“透明”位图的关键是创建一个“掩码”位图(mask bitmap),“掩码”位图是一个单色位图,它是位图中图像的一个单色剪影。

  在Windows编程中,绘图都要用到设备描述表,我们需创建两个内存设备描述表:位图设备描述表(image DC)和“掩码”位图设备描述表(mask DC)。位图设备描述表用来装入位图,而“掩码”位图设备描述表用来装入“掩码”位图。在“掩码”位图设备描述表中制作“掩码”位图的方式是:先创建一个单色的Bitmap,装入mask DC,然后,以“SRCCOPY”的方式将装有位图的位图设备描述表绘制(BitBlt)到mask DC上。这样,mask DC的显示平面中的位图即是“掩码”位图。

  绘制“透明”位图的实际操作步骤:

  1.将位图设备描述表以“SRCINVERT”的方式绘制(BitBlt)到显示设备描述表上;

  2.将“掩码”位图设备描述表以“SRCAND”的方式绘制(BitBlt)到显示设备描述表上;

  3.再将位图设备描述表以“SRCINVERT”的方式绘制(BitBlt)到显示设备描述表上。这样除“透明色”外的其余位图部分(图像部分)就被绘制到窗口上了。

  实现代码如下:

  void DrawTransparent(CDC * pDC, int x, int y, COLORREF crColour)

  { COLORREF crOldBack=pDC-〉SetBkColor(RGB(255,255,255));

   COLORREF crOldText=pDC-〉SetTextColor(RGB(0,0,0));

   CDC dcImage, dcMask;

   CBitmap bmp;

   bmp.LoadBitmap(IDB—TRANS);

  //IDB—TRANS是待显示位图的资源ID

   BITMAP bm;bmp.GetBitmap(&bm);

   int nWidth=bm.bmWidth,nHeight=bm.bmHeight;

  //为图像及mask各创建一个DC

   dcImage.CreateCompatibleDC(pDC);

   dcMask.CreateCompatibleDC(pDC);

  //把图像装入image DC

   CBitmap* pOldBitmapImage=dcImage.SelectObject(&bmp);

  //为“掩码”位图创建一个单色bitmap

   CBitmap bitmapMask;

   bitmapMask.CreateBitmap(nWidth, nHeight, 1, 1, NULL); //把mask位图装入mask DC

   CBitmap* pOldBitmapMask = dcMask.SelectObject(&bitmapMask); //用透明色创建“掩码”位图

  dcImage.SetBkColor(crColour);//crColor是位图中的透明色

   dcMask.BitBlt(0, 0, nWidth, nHeight, &dcImage, 0, 0, SRCCOPY);//分3步进行实际的绘制

   pDC-〉BitBlt(x, y, nWidth, nHeight, &dcImage, 0, 0, SRCINVERT);

   pDC-〉BitBlt(x, y, nWidth, nHeight, &dcMask, 0, 0, SRCAND);

   pDC-〉BitBlt(x, y, nWidth, nHeight, &dcImage, 0, 0, SRCINVERT); //恢复原先设置

   dcImage.SelectObject(pOldBitmapImage);

   dcMask.SelectObject(pOldBitmapMask);

   pDC-〉SetBkColor(crOldBack);

   pDC-〉SetTextColor(crOldText);}

  以上这种“透明”位图的绘制方法,还可以用到动画技术中,如绘制在某场景中不断移动的人物或动物,就可以通过将人物或动物位图“透明”地绘制到背景中实现。
ios-占位图.zip 图片文字,占位图,图片文字,占位图、placeholder 立即下载

相关推荐

孤读paper——《GhostNet:More Features from Cheap Operations》

《GhostNet:More Features from Cheap Operations》   发现一个点并解决就是一篇CVPR,该文章主要发现了优秀的网络的特点是feature map提取过程中的冗余性,这种冗余性体现在很多成对的feature map间很像,就好像彼此的“ghost”,而这种特征冗余性对于理解图像来说还是必要的,所以文章把feature map分为两种,一种是本质特征,一...

雄关漫道真如铁 而今迈步从头越 5151

TransparentBitmap

 // 创建反转的目标屏蔽码   BitBlt(hBack, 0, 0, ptSize.x, ptSize.y, hObject, 0, 0, NOTSRCCOPY);   // 拷贝主DC的背景到目标DC   BitBlt(hMem, 0, 0, ptSize.x, ptSize.y, hdc, xStart, yStart, SRCCOPY);   // 屏蔽位图的显示区 

xiao22508的专栏 614

保姆级教程:用COMSOL LiveLink™ for MATLAB 玩转自定义PDE,从理论到仿真一条龙

本文详细介绍了如何利用COMSOL LiveLink™ for MATLAB实现自定义PDE的从理论到仿真的完整流程。通过PDE模块与MATLAB的无缝集成,用户可以灵活处理非标准偏微分方程,适用于材料建模、传热传质验证等多物理场耦合研究。教程涵盖环境配置、方程标准化、界面操作及高级应用技巧,为工程仿真研究者提供原子级控制方案。

weixin_34098209的博客 354

TransparentBitmap函数设置透明位图的原理分析

// 设置透明位图 // 本函数把一种指定的颜色变成透明色,并可改变大小 // parameters: // hdc 显示句柄 // hBitmap 要显示的位图 // xStart,yStart 显示的位置 // xinc,yinc 显示的位图的加大加小 // cTransparentColor 变成透明的那种颜色 void CGameControl::TransparentBi

shanyuelanhua的专栏 1732

【现代电路理论】【2】考尔法设计无源单口网络

夏 弥:其实你在冰面上看到鱼浮上来 明年冬天如果你还在那里,那鱼还是会上来换气 那时候你就可以带一把冰镐 把冰面砸开把鱼捞上来熬汤

痛苦的时候装出幸福相,这不是那么难做到的事 2886

数字IC/FPGA 秋招知识点不全面整理

数字IC/FPGA 秋招知识点不全面整理

w0shishabi的博客 7866

透明位图

Ron GeryMicrosoft 网络开发技术小组摘要这篇文章讨论了在 Microsoft Windows 图形环境中用位图达到透明和屏蔽效果的几种方法,包括通过仿真和使用特殊的驱动器功能。包含其中的一个小样本应用程序 TRANSBLT 详细阐明了这篇文章讨论的大多数方法。介绍使用透明(TRANSPARENT)背景模式(用SetBrMode函数设置),一个应用程序就可以用透明

蝈蝈俊.net 2464

【OpenCV实战】简洁易懂的车牌号识别Python+OpenCV实现“超详解”(含代码)

简洁易懂的车牌号识别Python实现(含代码)1、整体思路2、代码详解 1、整体思路 2、代码详解

qq_40784418的博客 9万+

TransparentBitmap函数怎么把一张图片的背景色去掉 变成透明的

//本函数把一种指定的颜色变成透明色,并可改变大小 // hdc 显示句柄 // hBitmap 要显示的位图 // xStart,xStart 显示的位置 // xadd,yadd 显示的位图的大小变化:放大缩小 // 如:xadd=3 表示位图宽度加 3 // cTransparentColor 变成透明的那种颜色 void CMy1_6View ::TransparentBitmap(HDC

milijiangjun的博客 1807

把财务与管理会计装进一张表:读懂 S/4HANA 的 ACDOCA

别慌,这反而是设计所需。只是大量历史上为汇总、加速而建的索引与汇总表被淘汰或改造,很多被兼容视图 compatibility views 替代,通过视图去 ACDOCA 或 ACDOCT 取数,从而保证老代码还能 SELECT 到数据,但失去写权限。它把原来分散在多张表里的信息整合到一起,例如总账、固定资产、物料账、盈利能力分析 CO-PA、成本控制等维度,发布过的资料多次强调这一点。其二,查询必须带上高选择性的条件,尤其是 RLDNR、RBUKRS、GJAHR 这三个维度,能大幅降低列存扫描的代价。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 947

YOLO26 正式发布源代码!极致速度优化方案, 面向工业级落地的目标检测模型!

YOLO26 作为 Ultralytics 公司于 2025 年 9 月发布的最新一代目标检测模型,在架构设计和技术实现上展现了显著的创新。本文深入分析了 YOLO26 的核心架构改进和技术原理,重点探讨了其在边界框回归、推理流程、损失函数设计和优化算法方面的突破性进展。

魔改工程师的博客 1243

画一个透明背景的位图

 // 该函数摘自MSDN.void DrawTransparentBitmap(HDC hdc, HBITMAP hBitmap, short xStart,                           short yStart, COLORREF cTransparentColor)...{   BITMAP     bm;   COLORREF   cColor;   HBI

风之羽翼的专栏 1890

华为OD新系统机试真题 - 操作历史管理器的撤销/重做能力

华为OD机试新系统真题【操作历史管理器的撤销/重做能力】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【操作历史管理器的撤销/重做能力】

qq_45776114的博客 864

c语言创建一个透明的窗口,二级C语言辅导:绘制“透明”位图

绘制“透明”位图是指绘制某一位图中除指定颜色外的其余部分,我们称这种颜色为“透明色”。通过将位图的背景色指定为“透明色”,在绘制时,不绘制这部分背景,而仅绘制图像,这样就可以将位图中图像透明地绘制到窗口上。绘制“透明”位图的关键是创建一个“掩码”位图(mask bitmap),“掩码”位图是一个单色位图,它是位图中图像的一个单色剪影。在Windows编程中,绘图都要用到设备描述表,我们需创建两个内...

weixin_35799294的博客 653

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

c语言设置字体透明,二级C语言辅导:绘制“透明”位图

绘制“透明”位图是指绘制某一位图中除指定颜色外的其余部分,我们称这种颜色为“透明色”。通过将位图的背景色指定为“透明色”,在绘制时,不绘制这部分背景,而仅绘制图像,这样就可以将位图中图像透明地绘制到窗口上。绘制“透明”位图的关键是创建一个“掩码”位图(mask bitmap),“掩码”位图是一个单色位图,它是位图中图像的一个单色剪影。在Windows编程中,绘图都要用到设备描述表,我们需创建两个内...

weixin_29957761的博客 433

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

为VC++应用程序对话框添加透明位图

我们在进行程序的界面设计时,常常希望将位图的关键部分,也既是图像的前景显示在界面上,而将位图的背景隐藏起来,将位图与界面很自然的融合在一起,本实例介绍了透明位图的制作知识,并将透明位图在一个对话框中显示了出来,界面效果如图一所示: 图一、对话框界面上透明显示位图

StoneRain 1074

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

GIS地理信息系统中的位图透明画法,可用在栅格影像数据的显示上

<br />栅格数据的显示是GIS中的一个基本需求,通常就是用Bitmap位图根据一定的空间坐标转换方式计算出起点和尺寸,画在屏幕上。有些需求要求将位图“透明”地画在屏幕上,通常实现的方式就是将位图处理为均一底色(如黑色或白色)加栅格像素点的方式,再用TransparentBlt画在屏幕上,画的时候指定黑或白为透明就可以了。如下图所示:<br /> <br /><br /> <br />原始bitmap数据为这个样子:<br /> <br /><br /> <br />实现方式为:<br />BOOL CD

吕雪松的专栏 2652

透明位图的显示

透明位图的显示作者:王骏 下载本文示例代码包含透明色的位图的绘制方法有多种,最简单的方法是调用现成的函数:TransparentBlt,也可以通过自己的代码实现类似TransparentBlt的功能,实现过程也有两种形式,一种是事先做一张掩码位图,另一种是动态生成掩码位图。本文将介绍动态生成掩码位图绘制具有透明区域位图的方法。一、TransparentBlt 函数的使用 TransparentBl

XiaoDi_Liu的专栏 1450

使用BitBlt实现位图背景透明

我们先看一下 BitBlt 这个函数的原型: BOOL BitBlt(int x, int y, int nWidth,nHeight, CDC* PsrcDC, int xSrc, int ySrc, DWORD dwRop); 参数介绍:                      intx                              表示绘制位图目标左上角x坐标;

linshaolie 1万+
上一篇: 建议程序员用 的情话
下一篇: 关于CEdit控件的透明
普通网友
博客等级 码龄22年 1万+粉丝 3156原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值