MiniGui实现透明位图的方法

时间:2022-08-15 19:28:54

在做一个小项目时需要在屏幕上显示一个电子时钟,使用MINIGUI,实现效果如下图

MiniGui实现透明位图的方法

实现这个效果必须是有那个图片显示数字,用到的图片类似如下:

MiniGui实现透明位图的方法

结构显示在界面上,图片会覆盖原来的背景,造成效果不好。


解决这个问题有两种方法:

1、使用PNG格式透明底色的图片,这个需要MINIGUI支持PNG格式图片

2、使用MINIGUI提供的过滤位图的函数。


下面主要介绍第二种方法。

使用如下函数创建一个画布,注意最后一个参数必须为0

CreateMemDC(100,100, 16,MEMDC_FLAG_HWSURFACE | MEMDC_FLAG_SRCALPHA, 0x0000F000, 0x00000F00, 0x000000F0, 0x00000000);
然后把图片画在画布上

FillBoxWithBitmap(mem_dc, 0, 0, 0, 0, &myalarm);
设置画布过滤颜色

SetMemDCColorKey (mem_dc, MEMDC_FLAG_SRCCOLORKEY | MEMDC_FLAG_RLEACCEL, COLOR_black);
最后把画布铺到你的屏幕上去

BitBlt(mem_dc, 0, 0, 100, 100, hdc, 0, 0, 0);

实现的原理其实是相当于在把画布铺到屏幕过程中过滤掉你设置的特定颜色。