|
测试条件说明:
比如我们要显示下面的图片:
测试函数如下:
- GUI_HMEM hMemPNG;
-
- hMemPNG = GUI_MEMDEV_CreateEx(0, 0, 96, 96, GUI_MEMDEV_HASTRANS); /* 将PNG格式图片加载到存储设备里面 */
- GUI_MEMDEV_Select(hMemPNG);
- GUI_PNG_Draw(_ac1, 12721UL + 1, 0, 0);
- GUI_MEMDEV_Select(0);
- GUI_MEMDEV_WriteAt(hMemPNG, 10, 120); /* 调用显示 */
复制代码
测试出来是下面这种效果,显然不是我们想要的:

解决办法也比较简单
1、首先要保证你的图片是带透明通道的,无论是BMP还是PNG,一定要是ARGB8888的。是否透明,使用emWin自带的小软件BmpCvt一看便知,比如我们测试的这个
2、创建的存储设备使用32位颜色格式,即GUI_MEMDEV_CreateFixed(x, x, x, x, GUI_MEMDEV_HASTRANS, GUI_MEMDEV_APILIST_32, GUI_COLOR_CONV_8888);
3、绘制的时候,设置背景色为GUI_SetBkColor(GUI_TRANSPARENT)。
完整的代码如下:
- GUI_HMEM hMemPNG;
-
- hMemPNG = GUI_MEMDEV_CreateFixed(0, 0, 100, 100, GUI_MEMDEV_HASTRANS, GUI_MEMDEV_APILIST_32, GUI_COLOR_CONV_8888);
- GUI_MEMDEV_Select(hMemPNG);
- GUI_SetBkColor(GUI_TRANSPARENT);
- GUI_Clear();
- GUI_PNG_Draw(_ac1, 12721UL + 1, 0, 0);
- GUI_MEMDEV_Select(0);
-
- GUI_MEMDEV_WriteAt(hMemPNG, 10, 120);
复制代码
测试效果如下,已经完全正常:

最后附上四张带透明效果的PNG图片供大家测试:
四张PNG格式图片,带透明效果.7z
(48.97 KB, 下载次数: 228)
|
评分
-
查看全部评分
|