一种基于双缓冲的显示叠加方法与流程

文档序号:17318121发布日期:2019-04-05 21:23阅读:295来源:国知局
一种基于双缓冲的显示叠加方法与流程

本发明涉及一种基于双缓冲的显示叠加方法,属于计算机图像处理领域。



背景技术:

医疗机构使用的监护仪包括动态实时显示的波形图和固定显示的ui交互界面,其中动态显示的波形图的实时显示需要进行实时绘制,应用于监护仪的嵌入式平台的cpu比较弱,主控虽然能很好的完成低功耗和控制操作,但是对于图形界面处理则显得力不从心。特别是在需要呈现实时变化的图像时,会耗费大量的cpu计算能力,从而使负载过高。

用于人机交互的图形界面库,通常是不允许跨线程操作ui的。为了能够实现显示实时图像功能,要么在ui线程直接绘制图像,要么在另外的线程绘制图像,再通知到ui线程。在主控计算能力很强时,这两种通用的方案都能做到很好的效果。其中,当直接在ui线程绘制实时图像时,一些交互操作(例如弹出菜单、改变窗体大小等)会引起窗体重绘,此时实时图像显示将被暂停,直到窗体重绘完成。从而导致观感不佳,通常感觉是界面卡顿。当在独立线程绘制图像时,需要在绘图线程和ui线程之间进行拷贝交换图像数据,这将消耗更多的物理内存,在资源紧张的嵌入式系统中,对内存的使用要求非常苛刻。



技术实现要素:

为解决上述问题,本发明的目的在于提供一种基于双缓冲的显示叠加方法,将界面显示的图像拆分成ui交互层和动态图像层,并且ui交互层由ui线程处理,动态图像层由绘图线程处理,ui线程和绘图线程相互独立,不会因为ui交互层的交互操作影响动态图像层的绘制而导致实时显示画面卡顿,最终通过硬件加速器将两个线程处理得到的ui交互层和动态图像层混合叠加输出到屏幕,不需要两个线程之间进行拷贝交换图像数据,减少内存开销。

本发明解决其问题所采用的技术方案是:

一种基于双缓冲的显示叠加方法,在内存中创建两个帧缓冲区,显示驱动器交替从两个缓冲区读取信息,当从一个帧缓冲区读取信息时,在另一帧缓冲区内进行待显示图像的实时绘制;其中,在帧缓冲区内绘制待显示图像,具体包括如下步骤:

将待显示图像拆分为用于人机交互的ui交互层和用于显示实时数据变化的动态图像层;

分别确定ui交互层和动态图像层显示尺寸和位置;

分别使用独立的线程绘制所述ui交互层和动态图像层;

使用硬件加速器将绘制完成的ui交互层和动态图像层进行混合叠加得到待显示图像。

进一步,所述ui交互层包括始终显示的静态控件图层和交互操作触发显示的弹窗控件图层。

进一步,所述动态图像层包括至少一个图层。

进一步,绘制动态图像层时,使用透明色作为图层背景。

进一步,所述的分别确定ui交互层和动态图像层显示尺寸和位置,包括:获取显示屏幕尺寸大小,并根据显示屏幕尺寸大小以及预设布局确定ui交互层和动态图像层的显示尺寸和位置。

进一步,动态图像层的显示区域与静态控件图层的显示区域互补且铺满显示屏幕。

进一步,所述的将ui交互层和动态图像层进行叠加,具体包括:

建立窗口栈,用于对弹窗的位置坐标及显示尺寸数据进行压栈或出栈;

调整动态图像层的各图层位置,使其不重叠模糊;

将所述静态控件图层与动态图像层的所有图层进行混合叠加,得到中间图像层;

读取窗口栈中的信息,根据压栈的先后顺序,将弹窗控件图层依次叠加到中间图像层上,得到最终的待显示图像,若窗口栈的信息为空,则直接将中间图像层作为最终的待显示图像。

进一步,还包括判断弹窗显示尺寸是否超过屏幕尺寸,若超出屏幕尺寸则添加滚动条信息并与弹窗信息共同进行压栈或出栈。

本发明的有益效果是:本发明采用的一种基于双缓冲的显示叠加方法,将界面显示的图像拆分成ui交互层和动态图像层,并且ui交互层由ui线程处理,动态图像层由绘图线程处理,ui线程和绘图线程相互独立,不会因为ui交互层的交互操作影响动态图像层的绘制而导致实时显示画面卡顿,最终通过硬件加速器将两个线程处理得到的ui交互层和动态图像层混合叠加输出到屏幕,不需要两个线程之间进行拷贝交换图像数据,减少内存开销,同时解决了跨线程操作界面而引起的一些异常。

附图说明

图1是本公开的实施例的方法流程图;

图2是本公开的实施例的ui交互层的静态控件图层的示意图;

图3是本公开的实施例的动态图像层的示意图;

图4是本公开的实施例的无弹窗的待显示图像示意图;

图5是本公开的实施例的叠加弹窗控件图层后的待显示图像示意图;

其中图2-图5中的具体图像内容无关紧要,仅用于显示区域示意。

具体实施方式

为了使本发明的目的、技术方案和优点更加清楚,下面结合附图和具体实施例对本发明进行详细描述。本发明的基于双缓冲的显示叠加方法适用于需要显示实时绘制图像界面的嵌入式设备。

这里以医疗机构的监护仪举例,监护仪显示界面的内容可分为两部分,分别是实时变化波形的动态图像层和非实时变化的ui交互层,ui交互层主要显示一些静态的图像或变化的生理参数数值,包括文本、按钮、列表、选项框等常见ui控件;动态图像层主要显示需要实时绘制的动态图,可以有一个或多个图层,例如心电波形、脉搏、呼吸频率等图层。由于屏幕显示的原理是像素扫描,若直接在显示屏幕绘制图像,当窗口由于任何原因需要重绘时,总是先用背景色或背景图象将显示区清除,然后才显示图象,这样在短时间内背景色与显示图形交替出现,使得显示窗口看起来在闪。如果将背景刷设置成null,这样无论怎样重绘图形都不会闪了,但是会使得窗口的显示乱成一团,因为重绘时没有背景色对原来绘制的图形进行清除,而又叠加上了新的图形。因此,本发明通过双缓冲技术解决这些问题。

参照图1-5,一种基于双缓冲的显示叠加方法,在内存中创建两个帧缓冲区,显示驱动器交替从两个缓冲区读取信息,当从一个帧缓冲区读取信息时,在另一帧缓冲区内进行待显示图像的实时绘制;如图1所示,在帧缓冲区内绘制待显示图像,具体包括如下步骤:

将待显示图像拆分为用于人机交互的ui交互层和用于显示实时数据变化的动态图像层;

分别确定ui交互层和动态图像层显示尺寸和位置;

分别使用独立的线程绘制ui交互层和动态图像层;

使用硬件加速器将绘制完成的ui交互层和动态图像层进行混合叠加得到待显示图像。

具体的,ui交互层包括始终显示的静态控件图层和交互操作触发显示的弹窗控件图层;其中静态控件图层如图2所示除左上黑色方形区域外的区域,包括文本、按钮、列表、选项框、图标等常见ui控件,黑色方形区域表示ui交互层中的透明部分,为预留给动态图像层的显示区域。

如图3所示,动态图像层包括至少一个图层,绘制动态图像层时,使用透明色作为图层背景,即这里能在显示屏幕上看到的动态图像层只包括波形图和文字等,此处的波形图及文字等内容对本发明无关紧要,仅示意动态变化的图像;这里动态图像层的图层可以全部更新,也可以局部更新。

如图4所示,分别确定ui交互层和动态图像层显示尺寸和位置,包括:获取显示屏幕尺寸大小,并根据显示屏幕尺寸大小以及预设布局确定ui交互层和动态图像层的显示尺寸和位置。动态图像层的显示区域与静态控件图层的显示区域互补且铺满显示屏幕,即动态图像层填满ui交互层预留的透明部分。

如图5所示,将ui交互层和动态图像层进行叠加,具体包括:

建立窗口栈,用于对弹窗的位置坐标及显示尺寸数据进行压栈或出栈;

具体的,在界面中,当交互操作触发弹窗时,则需要将弹窗进行前置显示,当弹窗关闭后,则需要将弹窗的图层删除,这里使用压栈、出栈的方式实现弹窗的弹出与关闭,弹窗时,将弹窗位置及尺寸信息等压栈到窗口栈,关闭弹窗时,从窗口栈中删除相应的弹窗信息。

调整动态图像层的各图层位置,使其不重叠模糊;

使用硬件加速器将静态控件图层与动态图像层的所有图层进行混合叠加,得到中间图像层;

具体的,ui交互层作为背景,动态图像层作为前景,因为动态图像层的背景是透明色,则当动态图像层叠加到ui交互层上,填满ui交互层预留的透明部分后,只有动态图像层中需要显示的内容才会叠加到ui交互层上。

读取窗口栈中的信息,根据压栈的先后顺序,将弹窗控件图层依次叠加到中间图像层上,得到最终的待显示图像,若窗口栈的信息为空,则直接将中间图像层作为最终的待显示图像。

其中,在绘制弹窗控件图层时还包括判断弹窗显示尺寸是否超过屏幕尺寸,若超出屏幕尺寸则添加滚动条信息并与弹窗信息共同进行压栈或出栈。

以上所述,只是本发明的较佳实施例而已,本发明并不局限于上述实施方式,只要其以相同的手段达到本发明的技术效果,都应属于本发明的保护范围。在本发明的保护范围内其技术方案和/或实施方式可以有各种不同的修改和变化。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1