我说的这些方法都是在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);