重要说明,使用存储设备绘制透明图片,透明部分都是黑色背景解决办法
测试条件说明:比如我们要显示下面的图片:
测试函数如下:
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); /* 调用显示*/
测试出来是下面这种效果,显然不是我们想要的:
static/image/hrline/4.gif
解决办法也比较简单
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);
测试效果如下,已经完全正常:
static/image/hrline/4.gif
最后附上四张带透明效果的PNG图片供大家测试:
这坑人问题终于解决了,666 谢谢老师,刚好用上 好东西,之前就遇到过没有解决,这次可以优化一下了 ddddddddddddddd 请问下565颜色也这个代码也能行吗? 请问下我emwin565颜色,用这代码显示是一坨黑色方块,是怎么回事? Nick333 发表于 2020-12-17 11:14
请问下我emwin565颜色,用这代码显示是一坨黑色方块,是怎么回事?
可以考虑使用BmpCvt小软件生成带alpha通道的RGB565格式位图测试看看 GUI_MEMDEV_Select(hMemPNG);
GUI_SetBkColor(GUI_TRANSPARENT);
GUI_Clear();
GUI_DrawBitmap(&bmClockHand_Second_2x210, 390>>1, 390>>1);
GUI_MEMDEV_Select(0);
GUI_MEMDEV_Select(hMemDST);
GUI_SetBkColor(GUI_RED);
GUI_Clear();
GUI_MEMDEV_Rotate(hMemPNG, hMemDST, 0, 0, 60 * 1000, 1000);
GUI_MEMDEV_Select(0);
GUI_MEMDEV_WriteAt(hMemDST, 0, 0);
eric2013 发表于 2020-12-18 09:40
可以考虑使用BmpCvt小软件生成带alpha通道的RGB565格式位图测试看看
硬汉哥,我现在使用最新的emWin6.38版本,LCD是RGB565格式,本来想实现《第57章 emWin6.x的炫酷时钟表盘设计》,现在使用8888和565格式的存储设备都无法实现透明效果,代码和显示效果见图。 刚才把工程的emWin版本从6.38换回到6.16,其他代码没变。现在透明色又是正常的了,想问下emWin6.38版本怎么实现存储设备的透明色显示呢,是新版本的实现方式有变化吗?
putin 发表于 2024-4-2 22:41
刚才把工程的emWin版本从6.38换回到6.16,其他代码没变。现在透明色又是正常的了,想问下emWin6.38版本怎么 ...
emWin6.38颜色格式库是ARGB8888,而你使用的6.16应该是ABGR8888 eric2013 发表于 2024-4-3 08:22
emWin6.38颜色格式库是ARGB8888,而你使用的6.16应该是ABGR8888
谢谢硬汉哥,知道该怎么做了。
页:
[1]