硬汉嵌入式论坛

 找回密码
 立即注册
查看: 4733|回复: 18
收起左侧

[emWin] 痛苦至极,MDK5.22中携带的emWin5.36依然没开放ABGR转ARGB,导致F429配置为ARGB888

[复制链接]

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115661
QQ
发表于 2016-11-17 01:58:50 | 显示全部楼层 |阅读模式
此问题已经得到解决,看此贴:http://www.armbbs.cn/forum.php?mod=viewthread&tid=44512
=============================================
F429+32位SDRAM配置为ARGB8888格式时,绘制800*480*3的位图需要80多ms,而ABGR转ARGB就消耗了将近50ms左右
也就说,32位色绘制800*480*3的位图仅需20多ms即可。
=============================================
现在的版本使用宏定义依然没有任何效果:
6.png

2.png



==========================================
补充下些知识点,可能有些网友不太理解这里的含义,这个不是说做个软件上ABGR转ARGB,其实上面的截图中说的已经比较明白:
这里的意思是说emWin在5.30版本以前,它自己的颜色格式是固定的ABGR格式,如果用户的显示屏是ARGB格式的,那么每次emWin
的输出都要做颜色格式的转换,在这个上面浪费了很多时间,特别是刷图的时候,而emWin5.30版本以后,官方推出了ARGB格式,方
便了像STM32F429/439这种显示屏驱动了,这样emWin设置的颜色格式就可以直接输出了。大大提升了速度,特别是刷新图片的时候,
AGBGR8888转换F429的ARGB8888耗费了太多时间了,极其影响性能。而AGBR8888转RGB565要好非常多,因为将图片绘制到内存
设备后,已经转换成RGB565,所以直接输出的跟裸机操作一样,而转ARGB8888,即使存储到内存设备,每次输出依然要做颜色格式
转换,这个是因为ARGB格式多了一个8位的Alpha通过,每次绘制都要考虑到这个alpha的作用,所以干脆绘制到内存存储设备里面的
还依然是ABGR8888格式,这个就是速度慢的根本原因了。
回复

使用道具 举报

11

主题

144

回帖

177

积分

初级会员

积分
177
发表于 2016-11-17 08:31:54 | 显示全部楼层
难道GUI.h中的宏定义不对吗?
#if (GUI_USE_ARGB)
  #define GUI_MAKE_COLOR(ABGR)  (((((U32)ABGR) & 0xFF000000ul) ^ 0xFF000000ul) | ((((U32)ABGR) & 0x00FF0000ul) >> 16) | (((U32)ABGR) & 0x0000FF00ul) | ((((U32)ABGR) & 0x000000FFul) << 16))
  #define GUI_MAKE_TRANS(Alpha) (255 - (Alpha))
#else
  #define GUI_MAKE_COLOR(ABGR)  (ABGR)
  #define GUI_MAKE_TRANS(Alpha) (Alpha)
#endif
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115661
QQ
 楼主| 发表于 2016-11-17 09:44:33 | 显示全部楼层

回 lvehe 的帖子

lvehe:难道GUI.h中的宏定义不对吗?
#if (GUI_USE_ARGB)
  #define GUI_MAKE_COLOR(ABGR)  (((((U32)ABGR) & 0xFF000000ul) ^ 0xFF000000ul) | ((((U32)ABGR) & 0x00FF0000ul) >> 16) | (((U32)ABGR) & 0x0000FF00ul) | ((((U32)ABGR) & 0x00 .. (2016-11-17 08:31)
你理解错了,可能很多兄弟像你一样,不太理解我这个帖子的含义,我在楼主位补充了些知识点,帮助大家理解下,其实上面的截图中已经说的比较明白。
回复

使用道具 举报

57

主题

908

回帖

1079

积分

至尊会员

积分
1079
发表于 2016-11-25 20:12:41 | 显示全部楼层
源代码不开放的痛苦……
回复

使用道具 举报

6

主题

231

回帖

249

积分

高级会员

积分
249
发表于 2016-11-27 20:21:25 | 显示全部楼层
先回答我这个问题,宏定义对库文件有用吗?
例如你
#define GUI_USE_ARGB
对别人给你的*.lib文件起作用吗?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115661
QQ
 楼主| 发表于 2016-11-27 21:11:29 | 显示全部楼层

回 novice 的帖子

novice:先回答我这个问题,宏定义对库文件有用吗?
例如你
#define GUI_USE_ARGB
对别人给你的*.lib文件起作用吗? (2016-11-27 20:21)
当然有用啊,像RL-TCPnet网络协议栈的库,RL-FlashFS文件系统的库,都是通过宏定义配置的。
回复

使用道具 举报

5

主题

582

回帖

597

积分

版主

Rank: 7Rank: 7Rank: 7

积分
597
发表于 2016-11-29 09:53:09 | 显示全部楼层

回 eric2013 的帖子

eric2013:当然有用啊,像RL-TCPnet网络协议栈的库,RL-FlashFS文件系统的库,都是通过宏定义配置的。
(2016-11-27 21:11)
mdk的库用宏定义配置方法很独特,它将配置数据类型放在库外部,然后宏配置内容静态初始化这些数据类型,也就是库里实现配置不是用#if这种,而是动态的
我记得emwin的动态配置更多的是使用函数配置,即调用函数传递用户宏的配置
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115661
QQ
 楼主| 发表于 2016-11-29 10:54:56 | 显示全部楼层

回 myxiaonia 的帖子

myxiaonia:mdk的库用宏定义配置方法很独特,它将配置数据类型放在库外部,然后宏配置内容静态初始化这些数据类型,也就是库里实现配置不是用#if这种,而是动态的
我记得emwin的动态配置更多的是使用函数配置,即调用函数传递用户宏的配置
(2016-11-29 09:53)
谢谢myxiaonia兄告知这个知识点。

看早前UCGUI3.98的源码,很多宏配置都是#if这种形式。专门测试了当前的emWin5.32版本,的确很多宏配置基本都没有任何效果,部分管理头文件的宏配有效果,这个头文件有源代码。

就帖子中讨论的问题还不太好解决,不支持运行时配置,像显示屏显示方向配置,即可通过宏定义静态配置,也可以运行时配置,宏定义没效果的话,运行时配置肯定是没问题的。


ps: GUIConf.h文件中宏定义:
#define GUI_SUPPORT_TOUCH         0    // Support a touch screen (req. win-manager)    可以正常使用。
回复

使用道具 举报

4

主题

122

回帖

134

积分

初级会员

积分
134
发表于 2017-2-17 14:34:48 | 显示全部楼层
使用该宏定义是有效果的。我使用RGB565方式 原定义的蓝字加了宏之后变红字了

#ifndef GUICONF_H
#define GUICONF_H

/*********************************************************************
*
*       Multi layer/display support
*/
//#define GUI_USE_ARGB             (1)
#define GUI_NUM_LAYERS            2    // Maximum number of available layers

/*********************************************************************
*
*       Multi tasking support
*/
#ifdef OS_SUPPORT
#define GUI_OS                    (1)  // Compile with multitasking support
#else
#define GUI_OS                    (0)
#endif

#define GUI_MAXTASK               (5)   // 最大可调用EMWIN的任务数
/*********************************************************************
*
*       Configuration of touch support
*/
#ifndef   GUI_SUPPORT_TOUCH
  #define GUI_SUPPORT_TOUCH       (1)  // Support touchscreen
#endif

/*********************************************************************
*
*       Default font
*/
#define GUI_DEFAULT_FONT          &GUI_Font6x8

/*********************************************************************
*
*         Configuration of available packages
*/
#define GUI_SUPPORT_MOUSE             (1)    /* Support a mouse */
#define GUI_WINSUPPORT                (1)    /* Use window manager */
#define GUI_SUPPORT_MEMDEV            (1)    /* Memory device package available */
#define GUI_SUPPORT_DEVICES           (1)    /* Enable use of device pointers */


#endif  /* Avoid multiple inclusion */
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115661
QQ
 楼主| 发表于 2017-2-17 15:04:18 | 显示全部楼层

回 hance2000 的帖子

hance2000:使用该宏定义是有效果的。我使用RGB565方式 原定义的蓝字加了宏之后变红字了

#ifndef GUICONF_H
#define GUICONF_H

....... (2017-02-17 14:34) 
没用,仅是修改了下GUI.h文件里面定义的的颜色值而已。
回复

使用道具 举报

4

主题

20

回帖

4

积分

新手上路

积分
4
发表于 2017-2-22 17:37:52 | 显示全部楼层
你们讨论的这个问题,我虽然不懂,但是我大概看了emwin手册后(英文不行),如下
文字可能会对你们的讨论有帮助:
38.6.1 Using ChromeART accelerator
Nearly all functions available on the ChromeART accelerator of STM32F429 and
STM32F439 could be used with emWin. Once configured right it could speed up many
drawing operations drastically. The sample folder of emWin contains a configuration
file which uses nearly features of the ChromeART accelerator. That sample could be
found under Sample\\LCDConf\\GUIDRV_Lin\\STM32F429. Please note that this sample
is only available if the driver GUIDRV_Lin is licensed.
回复

使用道具 举报

4

主题

20

回帖

4

积分

新手上路

积分
4
发表于 2017-2-22 17:38:43 | 显示全部楼层
Eric的   #define GUI_USE_ARGB (1) 确实没错!
不过该文档的如下内容是否也需要注意:
15.3 Switching to ARGB

15.3.1 Configuration
#define GUI_USE_ARGB (1)

15.3.2 Required changes in existing applications
When switching from ABGR to ARGB or vice versa some things have to be considered.
Colors
32 bpp Memory devices
DIB bitmaps

15.3.3 Configuring the BitmapConverter
       以上15.3.2和15.3.3是否也要跟着改变呢~~~
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115661
QQ
 楼主| 发表于 2017-2-22 17:40:29 | 显示全部楼层

回 ysz0836 的帖子

ysz0836:429的加速器。 (2017-02-22 17:38) 
429的加速器就是DMA2D,起了一个高大上的名字。
回复

使用道具 举报

4

主题

20

回帖

4

积分

新手上路

积分
4
发表于 2017-2-22 17:53:16 | 显示全部楼层

回 eric2013 的帖子

eric2013:429的加速器就是DMA2D,起了一个高大上的名字。 (2017-02-22 17:40) 
Once configured right it could speed up many
drawing operations drastically. The sample folder of emWin contains a configuration
file which uses nearly features of the ChromeART accelerator. That sample could be
found under Sample\\LCDConf\\GUIDRV_Lin\\STM32F429. Please note that this sample
is only available if the driver GUIDRV_Lin is licensed.

有示例啊,文件夹:Sample\\LCDConf\\GUIDRV_Lin\\STM32F429,可以看看借鉴呢
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115661
QQ
 楼主| 发表于 2017-2-22 17:54:49 | 显示全部楼层

回 ysz0836 的帖子

ysz0836:Once configured right it could speed up many
drawing operations drastically. The sample folder of emWin contains a configuration
file which uses nearly features of the ChromeART accelerator. That sample could be
found under Sample\\LCDConf\\GUIDRV_Lin\\STM32F42 .. (2017-02-22 17:53)
驱动里面已经都用上了,这个跟楼主位的问题没有任何关系。[s:142]
回复

使用道具 举报

3

主题

8

回帖

17

积分

新手上路

积分
17
发表于 2017-10-8 17:06:55 | 显示全部楼层
老大,感觉你的解释有点不对啊。我把 COLOR_MODE_0 配置成 RGB888  还是需要 336ms  使用的是V6的板子  。能否把数据是怎么转换的 详细解释一下 ,图片格式是 RGB888的格式 ,显示的时候 使用的屏幕是 7寸的RGB888的屏幕 。中间都经过了哪些转换呢? 谢谢了
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115661
QQ
 楼主| 发表于 2017-10-8 17:15:19 | 显示全部楼层

回 dsyoung 的帖子

dsyoung:老大,感觉你的解释有点不对啊。我把 COLOR_MODE_0 配置成 RGB888  还是需要 336ms  使用的是V6的板子  。能否把数据是怎么转换的 详细解释一下 ,图片格式是 RGB888的格式 ,显示的时候 使用的屏幕是 7寸的RGB888的屏幕 。中间都经过了哪些转换呢 .. (2017-10-08 17:06) 
解释没问题,等待我发布这个帖子里面ARGB格式库的应用笔记,有很多东西需要你去修改的,不过我已经修改好,可以直接拿去用:http://www.armbbs.cn/forum.php?mod=viewthread&tid=37962

下周周日前发布。
回复

使用道具 举报

6

主题

231

回帖

249

积分

高级会员

积分
249
发表于 2017-10-8 19:22:05 | 显示全部楼层
我非常装逼地看着你们惨叫,哈哈。[s:149]
回复

使用道具 举报

4

主题

122

回帖

134

积分

初级会员

积分
134
发表于 2017-10-9 10:15:40 | 显示全部楼层
似乎可以参考H7库中关于EMWIN的例程,同样也有5.4的库
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-5-10 11:23 , Processed in 0.328064 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表