绘制不规则位图方法总结,多种实现方法,全面测试比较

本文总结了六种实现不规则位图透明效果的方法,包括TransparentBlt、蒙板位图、AlphaBlend等,对每种方法的程序实现、运行效率和视觉效果进行了详细比较和评价。
摘要由CSDN通过智能技术生成
首先要说的是,所谓不规则位图的绘制,意思是说一张位图(位图永远是规则的),上面有个不规则图形,把这张位图绘制到某一界面上时,要求只绘制位图上那个不规则图形,其它地方保持背景不变。比如说画个太阳,不能把太阳所在的矩形的背景全部覆盖,而应该只覆盖太阳部分,本文将全面介绍绘制方法,以及它们的优劣!(我从我的程序中抄过来,并将变量改成通用名字,可能有手误的地方)
        我说的这些方法都是在VC中的,VB中应该可以方便的用其它格式的图片如gif,可以为透明,所以本文不针对VB读者。这些问题都是我在CSDN中问而未果的问题,希望给与我有同样迷惑的朋友一点帮助!
       程序中的w和h为位图的宽度和高度。

方法一:
       首先把不规则图形以外的地方(即要求是透明的地方),弄成图形中不会出现的颜色(用图像处理软件),如白色,然后用下面的程序:
//包函#include "Wingdi.h"
//并在工程设置中的link中的对象/库模块中加入:msimg32.lib

CBitmap YourBmp;
YourBmp.LoadBitmap(IDB_XXXX); //要显示的位图

CDC* pDC=GetDC();

CDC YourDC;
YourDC.CreateCompatibleDC(pDC);
YourDC.SelectObject(&Yourbmp);

TransparentBlt(pDC->m_hDC,0,0,w,h,YourDC.m_hDC,0,0,w,h,
    RGB(255,255,255) //在位图中视为透明的颜色的RGB值
 );

ReleaseDC(pDC);

评价:程序编制简单,但运行速度慢,有闪烁(用一张208*15的位图测试),所以还是不要图方便!

方法二:
       做一张蒙板位图,大小与要绘制的位图一样,分辨率也一样,让蒙板对应于图形区域的地方为纯白色,其余地方(要求透明的地方)为纯黑色。

CBitmap YourBmp;
YourBmp.LoadBitmap(IDB_XXXX); //要显示的位图

CBitmap YourMasker;
YourMasker.LoadBitmap(IDB_XXXX); //蒙板位图

CBitmap background;
background.LoadBitmap(IDB_XXXX); //背景位图

CDC* pDC=GetDC();

CDC YourDC;
YourDC.CreateCompatibleDC(pDC);

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值