硬汉嵌入式论坛

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

[emWin] 如何使窗口透明,即可以看到下面的窗口

[复制链接]

58

主题

267

回帖

446

积分

高级会员

积分
446
发表于 2018-12-13 01:09:57 | 显示全部楼层 |阅读模式
在实现界面的时候,因为背景图比较大,所以切换界面会比较慢,大概200ms刷新时间。因为每个界面的背景图都相同,我现在想了个办法,创建一个最底层窗口,加载背景图。

然后创建所有其他窗口都作为这个底层窗口的子窗口,子窗口每次只显示一个。
将所有子窗口的背景色设置为透明,就可以实现不刷新背景,只刷新控件。加快显示速度。

但通过函数 WINDOW_SetBkColor(hWin, GUI_TRANSPARENT); 设置透明背景后,实际上并不能显示下方的底层窗口,即子窗口并没有透明。

GUI_EnableAlpha(1);这个函数也已经调用了。

请问有哪位大神知道该怎样设置窗口透明?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115778
QQ
发表于 2018-12-13 01:25:57 | 显示全部楼层
透明更耗性能,你现在用的那个系列芯片,如果动态内存够大,比较方便些,可以直接绘制到存储设备里面。

以F429为例,使用32位带宽SDRAM,加载后,可以15ms绘制一张800*480分辨率的图片。
回复

使用道具 举报

5

主题

582

回帖

597

积分

版主

Rank: 7Rank: 7Rank: 7

积分
597
发表于 2018-12-13 11:20:42 | 显示全部楼层
我记得emwin有个例程,是通过切换窗口而不是重绘画面的方法做的,那个性能非常好,当然内存占用比较大
回复

使用道具 举报

58

主题

267

回帖

446

积分

高级会员

积分
446
 楼主| 发表于 2018-12-13 21:37:42 | 显示全部楼层
eric2013 发表于 2018-12-13 01:25
透明更耗性能,你现在用的那个系列芯片,如果动态内存够大,比较方便些,可以直接绘制到存储设备里面。

...

我用的是407,我测试了下刷图片,800x480的屏幕,FSMC配置如下:
        readWriteTiming.FSMC_AddressSetupTime = 15;
        readWriteTiming.FSMC_AddressHoldTime = 0;
        readWriteTiming.FSMC_DataSetupTime = 60;
        readWriteTiming.FSMC_BusTurnAroundDuration = 0x00;
        readWriteTiming.FSMC_CLKDivision = 0x00;
        readWriteTiming.FSMC_DataLatency = 0x00;
        readWriteTiming.FSMC_AccessMode = FSMC_AccessMode_A;        //模式A


        writeTiming.FSMC_AddressSetupTime = 1;
        writeTiming.FSMC_AddressHoldTime = 0x00;
        writeTiming.FSMC_DataSetupTime = 1;
        writeTiming.FSMC_BusTurnAroundDuration = 0x00;
        writeTiming.FSMC_CLKDivision = 0x00;
        writeTiming.FSMC_DataLatency = 0x00;
        writeTiming.FSMC_AccessMode = FSMC_AccessMode_A;                //模式A

上面那个读写延时不能再短了,再短就刷新不了屏幕。我算了一下,一个像素要450ns左右,整个屏幕理论上也要175ms左右。这个性能应该是被显示芯片限制了。

你的15ms刷新用的是哪款显示芯片?我用的NT35510.

emWin的机制,完全透明的窗口,是否就不会刷新透明部分?还是说也会把透明部分的背景再次刷新?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115778
QQ
发表于 2018-12-14 03:00:08 | 显示全部楼层
ihavedone 发表于 2018-12-13 21:37
我用的是407,我测试了下刷图片,800x480的屏幕,FSMC配置如下:
        readWriteTiming.FSMC_AddressSetupTi ...

用的F429,是自带LCD控制器和DAM2D加速的。

你用F407的话,板子上面是否有外置总线接口的SRAM或者NOR Flash,有的话,可以一定程度上加速。有一个解决办法。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-17 22:31 , Processed in 0.482859 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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