首先要说的是,所谓不规则位图的绘制,意思是说一张位图(位图永远是规则的),上面有个不规则图形,把这张位图绘制到某一界面上时,要求只绘制位图上那个不规则图形,其它地方保持背景不变.比如说画个太阳,不能把太阳所在的矩形的背景全部覆盖,而应该只覆盖太阳部分,本文将全面介绍绘制方法,以及它们的优劣!(我从我的程序中抄过来,并将变量改成通用名字,可能有手误的地方) 我说的这些方法都是在vc中的,vb中应该可以方便的用其它格式的图片如gif,可以为透明,所以本文不针对vb读者.这些问题都是我在csdn中问而未果的问题,希望给与我有同样迷惑的朋友一点帮助! 程序中的w与h为位图的宽度与高度.
cbitmap yourbmp;yourbmp.loadbitmap(idb_xxxx); //要显示的位图 【程序编程相关:高亮网页中的关键字】
方法一: 首先把不规则图形以外的地方(即要求是透明的地方),弄成图形中不会出现的颜色(用图像处理软件),如白色,然后用下面的程序://包函#include "wingdi.h"//并在工程设置中的link中的对象/库模块中加入:msimg32.lib 【推荐阅读:Java中static、this、sup】
cdc yourdc;yourdc.createcompatibledc(pdc);yourdc.selectobject(&yourbmp); 【扩展信息:对主流技术的分析和总结】
cdc* pdc=getdc();
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);yourdc.selectobject(&yourbmp);
... 下一页