比较正统的方法,是使用三元光栅操作,这个应该学校有讲吧,我就不多说了。
这次说一个使用windows gdi函数实现透明位图的办法。
windows有好几个gdi函数可以实现透明位图,有些是通过掩码图片指定,有些是通过透明色指定。这次只说一个TransparentBlt()函数
TransparentBlt()和BitBlt()参数差不多,就多了一个透明色。具体的可以参考MSDN。
需要说明的是,该函数在MSIMG32.LIB库中定义,需要引用:
#pragma comment(lib, "MSIMG32.LIB")
下面是个完整的例子,通过该函数实现透明位图:
#include <graphics.h>
#include <conio.h>
// 引用该库才能使用 TransparentBlt 函数
#pragma comment( lib, "MSIMG32.LIB")
void main()
{
// 创建绘图窗口
initgraph(640, 480);
// 定义 IMAGE 对象,并加载 c:\test.bmp 图片
// 要求:该图片大小 80 x 80,用白色表示透明部分
IMAGE img;
loadimage(&img, "c:\\test.bmp");
// 获取绘图窗口和 IMAGE 对象的句柄,TransparentBlt 函数需要用
HDC dstDC = GetImageHDC();
HDC srcDC = GetImageHDC(&img);
// 使用 Windows GDI 函数实现透明位图
TransparentBlt(dstDC, 0, 0, 80, 80, srcDC, 0, 0, 80, 80, 0xffffff); // 最后一个参数是表示透明色为白色
// 使 GDI 操作生效
FlushBatchDraw();
// 按任意键退出
getch();