发明内容
本发明要解决的技术问题是提供一种展现图像的系统及方法,能够增强图像展现的扩展性,并提高开发效率。
本申请公开了一种展现图像的系统,包括:抽象图像处理引擎、继承于抽象图像处理引擎的业务图像处理引擎、抽象线程池和继承于抽象线程池的业务线程池,在所述抽象图像处理引擎中定义图像获取功能,所述业务图像处理引擎具体实现图像获取功能,并且在所述抽象图像处理引擎中具体实现图像处理功能和图像显示功能,其中:
所述抽象图像处理引擎,用于向业务线程池放入图像获取任务,并将所述图像获取任务动态绑定到业务图像处理引擎,在存在空闲线程时实现图像获取;在获取到图像后,根据显示参数对所述图像进行处理,并在完成处理后,根据显示参数对图像进行显示。
进一步地,所述系统还包括图像缓存管理器,并且包括抽象内存缓存和/或抽象外存缓存,在包含抽象内存缓存的情况下,还包含继承于抽象内存缓存的业务内存缓存,在包含抽象外存缓存的情况下,还包含继承于抽象外存缓存的业务外存缓存,抽象内存缓存与抽象外存缓存定义图像检索功能、存储功能和删除功能接口,所述业务内存缓存与业务外存缓存实现接口定义的功能,其中:
所述抽象图像处理引擎,还用于在向业务线程池放入图像获取任务前,通过图像缓存管理器获取到业务内存缓存和/或业务外存缓存,在业务内存缓存和/或业务外存缓存中进行图像查找,如果未查找到图像,则执行所述向业务线程池放入图像获取任务。
进一步地,所述抽象图像处理引擎,还用于在获取到图像后,将获取到的图像添加到业务内存缓存和/或业务外存缓存中。
进一步地,所述抽象图像处理引擎在业务内存缓存和/或业务外存缓存中进行图像查找,包括:
所述抽象图像处理引擎预先接收图像对应的键Key,根据图像对应的键在业务内存缓存和/或业务外存缓存中进行图像查找。
进一步地,所述抽象图像处理引擎根据显示参数对图像进行显示,包括:
所述抽象图像处理引擎预先接收图像显示控件和显示参数;
创建图像显示参数对象,配置显示参数,获取图像显示控件,根据图像显示参数对象,调用图像显示控件的呈现方法显示图像。
进一步地,一种展现图像的方法,应用于展现图像的系统中,该展现图像的系统包括:抽象图像处理引擎、继承于抽象图像处理引擎的业务图像处理引擎、抽象线程池和继承于抽象线程池的业务线程池,在所述抽象图像处理引擎中定义图像获取功能,所述业务图像处理引擎具体实现图像获取功 能,并且在所述抽象图像处理引擎中具体实现图像处理功能和图像显示功能,所述方法包括:
所述抽象图像处理引擎向业务线程池放入图像获取任务,并将所述图像获取任务动态绑定到业务图像处理引擎,在存在空闲线程时实现图像获取;
在获取到图像后,所述抽象图像处理引擎根据显示参数对所述图像进行处理,并在完成处理后,根据显示参数对图像进行显示。
进一步地,所述展现图像的系统还包括图像缓存管理器,并且包括抽象内存缓存和/或抽象外存缓存,在包含抽象内存缓存的情况下,还包含继承于抽象内存缓存的业务内存缓存,在包含抽象外存缓存的情况下,还包含继承于抽象外存缓存的业务外存缓存,抽象内存缓存与抽象外存缓存定义图像检索功能、存储功能和删除功能接口,所述业务内存缓存与业务外存缓存实现接口定义的功能,所述方法还包括:
所述抽象图像处理引擎在向业务线程池放入图像获取任务前,通过图像缓存管理器获取到业务内存缓存和/或业务外存缓存,在业务内存缓存和/或业务外存缓存中进行图像查找,如果未查找到图像,则执行所述向业务线程池放入图像获取任务。
进一步地,所述方法还包括:
所述抽象图像处理引擎在获取到图像后,将获取到的图像添加到业务内存缓存和/或业务外存缓存中。
进一步地,所述在业务内存缓存和/或业务外存缓存中进行图像查找,包括:
所述抽象图像处理引擎预先接收图像对应的键Key,根据图像对应的键在业务内存缓存和/或业务外存缓存中进行图像查找。
进一步地,所述根据显示参数对图像进行显示,包括:
所述抽象图像处理引擎预先接收图像显示控件和显示参数;
创建图像显示参数对象,配置显示参数,获取图像显示控件,根据图像显示参数对象,调用图像显示控件的呈现方法显示图像。
综上所述,本申请具有如下有益效果:
(1)统一实现与展现方式,统一实现图像的获取、缓存、处理、展示等功能。避免不同的开发人员重复开发,浪费时间;避免不同技术水平上的开发人员带来水准参差不齐的代码,导致程序后期Bug过多,难以维护;避免优化中造成模块的遗漏等问题。
(2)面对不同的业务中所使用的不同图像进行针对性的配置,根据不同的图像展示模块进行参数的配置,如:图像下载地址、图像大小、图像缓存类型、缓存大小等。让开发人员在后期开发中更加集中关注于业务的实现,而非图像的展现、实现细节。
(3)提高程序的开发效率与维护性,同时在运行时为用户带来更好的用户体验。提升程序的执行效率、更低的内存占用,更流畅的用户体验。
具体实施方式
下文中将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
如图1所示,本申请的展现图像的系统,包括:抽象图像处理引擎、继承于抽象图像处理引擎的业务图像处理引擎、抽象线程池和继承于抽象线程池的业务线程池,还可以包括图像缓存管理器,并且包括抽象内存缓存和/或抽象外存缓存,在包含抽象内存缓存的情况下,还包含继承于抽象内存缓存的业务内存缓存,在包含抽象外存缓存的情况下,还包含继承于抽象外存缓存的业务外存缓存,在抽象图像处理引擎中定义图像获取功能,业务图像处理引擎具体实现图像获取功能,并且在抽象图像处理引擎中具体实现图像处理功能和图像显示功能。
下面分别对系统的各组成部分进行说明。
(一)定义抽象图像处理引擎。
抽象图像处理引擎是整个系统的核心,其是对图像检索、图像获取、图像处理、图像显示等一系列流程的衔接与执行。抽象图像处理引擎不能直接使用,因为部分功能未实现,只是抽象出该功能。要想完整使用图像处理引擎,需根据不同的业务需求由各自的业务图像处理引擎继承抽象图像处理引擎,具体实现由抽象图像处理引擎定义的功能。
图像获取是容易根据业务的需求而变的功能,所以这里以抽象方法的方式抽象出来,抽象图像处理引擎只需知道通过该抽象方法能完成相应功能即可,具体业务如何获取图像由业务图像处理引擎具体实现。而图像的处理是一个依据具体显示参数来执行的过程,该功能对所有业务都一样,所以可以在抽象图像处理引擎中集中实现,今后需增加新的处理参数,修改这一处即可对所有业务生效。图像显示功能则是将处理过的图像显示到图像显示控件上。
抽象图像处理引擎初始化过程中,会按顺序执行定义的抽象方法,依次初始化缓存(内存缓存及外存缓存)和线程池。抽象方法的实现是由业务图像处理引擎实现。
在第一次调用展现方法时,需首先通过单例模式创建与业务相关的并继承于抽象图像处理引擎的业务图像处理引擎。业务图像处理引擎构造过程中,根据继承的特性,先执行抽象图像处理引擎中的初始化代码,其次执行业务图像处理引擎中的初始化代码,最终完成对业务图像处理引擎的初始化。
抽象图像处理引擎的运行过程如下:
步骤1:抽象图像处理引擎接收要显示图像对应的键(Key)、操作系统内置的图像显示控件和显示参数;
图像对应的键、图像显示控件和显示参数传递到抽象图像处理引擎定义的显示方法中。
步骤2:抽象图像处理引擎通过图像缓存管理器获取到业务内存缓存和/或业务外存缓存,在业务内存缓存和/或业务外存缓存中根据图像对应的键进行图像查找;
抽象内存缓存与抽象外存缓存定义图像检索功能、存储功能和删除功能接口,业务内存缓存与业务外存缓存实现接口定义的功能。抽象图像处理引擎通过图像缓存管理器(抽象图像处理引擎查询时依赖图像缓存管理器)获取到业务内存缓存和/或业务外存缓存(图像存缓管理器管理内存缓存与外存缓存,抽象缓存与业务缓存之间利用多态在运行时动态绑定及调用)。如果业务实现了内存缓存,则先通过键(Key)查找内存中是否存在对应的值(Value),即图像。如果内存中不存在,再判断业务是否实现了外存缓存,如果业务实现了外存缓存,则通过键(Key)查找外存中是否存在对应的值(Value),即图像。如果内存中存在,则跳过外存检索的过程。如果仅实现了内存缓存,则只在内存缓存中检索。如果仅实现了外存缓存,则只在外存缓存中检索。
步骤3:如果未从缓存中得到图像,则执行步骤4,否则执行步骤6;
步骤4:抽象图像处理引擎向业务线程池放入图像获取任务,并将图像获取任务动态绑定到业务图像处理引擎,在存在空闲线程时实现图像获取;
如果没有从缓存中得到图像,则将图像获取任务放到之前初始化好的线程池(抽象图像处理引擎依赖于线程池)队列中,线程池中只要有任一处于空闲状态的线程,则将该任务交给该空闲线程去执行。如果存在多个空闲线程,则由操作系统随机分配。图像获取任务是通过抽象图像处理引擎中事先定义的获取方法,利用多态特性在运行时中动态绑定到业务图像处理引擎中实现的获取方法,由业务图像处理引擎中的或方法去获取图像。
步骤5:抽象图像处理引擎在获取到图像后,将获取到的图像添加到业务内存缓存和/或业务外存缓存中;
图像获取成功后,通过步骤3中获取到的业务内存缓存、业务外存缓存,将图像分别添加到内存缓存、外存缓存中,以供下次使用。
步骤6:在获取到图像后,抽象图像处理引擎根据显示参数对图像进行处理;
得到图像后,抽象图像处理引擎依赖于显示参数,利用步骤1中传递进来的显示参数,有选择性的调用抽象图像处理引擎中已经实现好的图像处理方法执行具体的图像处理操作。
显示参数是一系列配置选项,其中包括是否高斯模糊、是否灰度化、是否圆角化、载入图像中显示的占位图等一系列常用参数。这些参数单独存在并没有任何意义,需配合抽象图像处理引擎中的图像处理与图像显示方法才能起作用。
图像处理与显示方法,是在抽象图像处理引擎中统一实现的方法。当获取到图像的原始文件后,会在图像处理方法中对图像进行加工,依据参数的配置对图像执行如圆角化、灰度化等处理。当处理完毕后,传递给图像显示方法显示图像。
图像处理部分代码如下所示:
步骤7:在完成处理后,根据显示参数对图像进行显示。
图像处理完毕后,利用步骤1中传递进来的显示参数及系统内置的图像显示控件,调用显示控件的呈现方法,最终将图像显示在屏幕上。
通过调用抽象图像处理引擎中实现的显示图像的方法,传入相应的图像显示控件与显示参数,即可显示图像。
具体步骤如下:
步骤a:创建图像显示参数对象,配置显示参数;
步骤b:获取需显示图像的图像显示控件;
步骤c:调用抽象图像处理引擎的显示图像的方法,传入需显示图像的图像显示控件以及显示参数对象,根据图像显示参数对象,调用图像显示控件的呈现方法显示图像。
相关代码如下:
抽象图像处理引擎类关键代码如下:
(二)定义抽象内存缓存、抽象外存缓存。
抽象内存缓存、抽象外存缓存同样是不能直接使用的,它只是定义出了缓存该具有哪些功能,一般包括添加、删除、获取、清除全部缓存等基本功能。具体每个功能如何实现,策略如何,需要由继承自它的业务内存缓存、业务外存缓存来实现。
以下是抽象内存缓存关键代码,抽象外存缓存与其类似:
(三)实现图像缓存管理器。
图像缓存管理器维护着内存缓存与外存缓存,业务图像处理引擎初始化时,将配置的缓存参数传递到抽象图像处理引擎,抽象图像处理引擎根据业务图像处理引擎传递进来的缓存参数创建该管理器。该管理器根据缓存参 数,维护着继承于抽象内存缓存、抽象外存缓存的业务内存缓存、业务外存缓存。抽象图像处理引擎与缓存交互时,均通过图像缓存管理器完成。
图像缓存管理器初始化流程如下:
(1)抽象图像处理引擎根据业务图像处理引擎传递进来的缓存参数,判定是否启用内存缓存,如果启用,则将业务内存缓存按指定的容量参数进行初始化;
(2)抽象图像处理引擎根据业务图像处理引擎传递进来的缓存参数,判定是否启用外存缓存,如果启用,则将业务外存缓存按指定的容量参数、缓存目录参数进行初始化。
图像缓存管理器初始化关键代码如下:
(四)实现业务图像处理引擎。
业务图像处理引擎的实现是继承抽象图像处理引擎,公共的流程部分已经由抽象图像处理引擎完成,剩下要做的就是根据业务需要,实现抽象图像处理引擎中定义的缓存初始化方法、线程池初始化方法以及图像获取方法。在缓存初始化方法中选择内存缓存、外存缓存;在线程池初始化方法中选择线程池;在图像获取方法中实现获取方法。执行过程中,抽象图像处理引擎会根据多态的特性调用配置的缓存及线程池来完成工作。
业务图像处理引擎代码结构如下:
(五)实现业务内存缓存、业务外存缓存。
前述定义了抽象内存缓存、抽象外存缓存,其作用是作为抽象图像处理引擎的一个接口,使其可以在更高一层执行一系列操作。但只有定义,没有实现是无法工作的。通过继承抽象内存缓存、抽象外存缓存,实现其定义的接口,可以完成业务内存缓存、业务外存缓存的实现。根据不同的业务场景,可以实现如最近最少使用(LRU)、先进先出(FIFO)等策略的内存缓存;也可以实现如限制文件数量、限制总文件大小等策略的外存缓存。
具体的内存缓存代码如下(外存缓存类似):
public class MemLruCache<T>extends AbstractMemCache<T>{
public void init(int size){
//需在此方法实现抽象内存缓存中定义的初始化方法
}
……//省略其它若干由图像内存缓存定义的需实现的方法
}
如图2所示,本申请还提供了一种展现图像的方法,应用于展现图像的系统中,该展现图像的系统包括:抽象图像处理引擎、继承于抽象图像处理引擎的业务图像处理引擎、抽象线程池和继承于抽象线程池的业务线程池,在抽象图像处理引擎中定义图像获取功能,业务图像处理引擎具体实现图像获取功能,并且在抽象图像处理引擎中具体实现图像处理功能和图像显示功能,方法包括:
步骤201:抽象图像处理引擎向业务线程池放入图像获取任务,并将图像获取任务动态绑定到业务图像处理引擎,在存在空闲线程时实现图像获取;
步骤202:在获取到图像后,抽象图像处理引擎根据显示参数对图像进行处理;
步骤203:在完成处理后,根据显示参数对图像进行显示。
展现图像的系统还包括图像缓存管理器,并且包括抽象内存缓存和/或抽象外存缓存,在包含抽象内存缓存的情况下,还包含继承于抽象内存缓存的业务内存缓存,在包含抽象外存缓存的情况下,还包含继承于抽象外存缓存的业务外存缓存,抽象内存缓存与抽象外存缓存定义图像检索功能、存储功能和删除功能接口,业务内存缓存与业务外存缓存实现接口定义的功能,方法还包括:
抽象图像处理引擎在向业务线程池放入图像获取任务前,通过图像缓存 管理器获取到业务内存缓存和/或业务外存缓存,在业务内存缓存和/或业务外存缓存中进行图像查找,如果未查找到图像,则执行向业务线程池放入图像获取任务。
本申请的展现图像的方法还包括:
抽象图像处理引擎在获取到图像后,将获取到的图像添加到业务内存缓存和/或业务外存缓存中。
本申请中在业务内存缓存和/或业务外存缓存中进行图像查找,包括:
抽象图像处理引擎预先接收图像对应的键Key,根据图像对应的键在业务内存缓存和/或业务外存缓存中进行图像查找。
本申请中根据显示参数对图像进行显示,包括:
抽象图像处理引擎预先接收图像显示控件和显示参数;
创建图像显示参数对象,配置显示参数,获取图像显示控件,根据图像显示参数对象,调用图像显示控件的呈现方法显示图像。
本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
尽管上文对本发明进行了详细说明,但是本发明不限于此,本技术领域技术人员可以根据本发明的原理进行各种修改。因此,凡按照本发明原理所作的修改,都应当理解为落入本发明的保护范围。