eric2013 发表于 2018-8-8 00:47:00

重要说明,使用存储设备绘制透明图片,透明部分都是黑色背景解决办法

测试条件说明:
比如我们要显示下面的图片:



测试函数如下:
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图片供大家测试:






byccc 发表于 2018-8-8 14:18:55

这坑人问题终于解决了,666

loliko 发表于 2018-8-8 15:16:04

谢谢老师,刚好用上

张良 发表于 2018-8-10 17:32:56

好东西,之前就遇到过没有解决,这次可以优化一下了

1314一路向前 发表于 2018-8-10 18:14:20

ddddddddddddddd

Nick333 发表于 2020-12-17 11:13:02

请问下565颜色也这个代码也能行吗?

Nick333 发表于 2020-12-17 11:14:14

请问下我emwin565颜色,用这代码显示是一坨黑色方块,是怎么回事?

eric2013 发表于 2020-12-18 09:40:09

Nick333 发表于 2020-12-17 11:14
请问下我emwin565颜色,用这代码显示是一坨黑色方块,是怎么回事?

可以考虑使用BmpCvt小软件生成带alpha通道的RGB565格式位图测试看看

eric2013 发表于 2022-3-19 01:39:25

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);

putin 发表于 2024-4-2 18:29:16

eric2013 发表于 2020-12-18 09:40
可以考虑使用BmpCvt小软件生成带alpha通道的RGB565格式位图测试看看

硬汉哥,我现在使用最新的emWin6.38版本,LCD是RGB565格式,本来想实现《第57章 emWin6.x的炫酷时钟表盘设计》,现在使用8888和565格式的存储设备都无法实现透明效果,代码和显示效果见图。

putin 发表于 2024-4-2 22:41:34

刚才把工程的emWin版本从6.38换回到6.16,其他代码没变。现在透明色又是正常的了,想问下emWin6.38版本怎么实现存储设备的透明色显示呢,是新版本的实现方式有变化吗?

eric2013 发表于 2024-4-3 08:22:09

putin 发表于 2024-4-2 22:41
刚才把工程的emWin版本从6.38换回到6.16,其他代码没变。现在透明色又是正常的了,想问下emWin6.38版本怎么 ...

emWin6.38颜色格式库是ARGB8888,而你使用的6.16应该是ABGR8888

putin 发表于 2024-4-3 09:38:01

eric2013 发表于 2024-4-3 08:22
emWin6.38颜色格式库是ARGB8888,而你使用的6.16应该是ABGR8888

谢谢硬汉哥,知道该怎么做了。
页: [1]
查看完整版本: 重要说明,使用存储设备绘制透明图片,透明部分都是黑色背景解决办法