基于Android的不规则区域矢量图动态检测方法和装置与流程

文档序号:17292611发布日期:2019-04-03 04:05阅读:254来源:国知局
基于Android的不规则区域矢量图动态检测方法和装置与流程

本发明涉及图形数据处理技术领域,尤其涉及一种基于android的不规则区域矢量图动态检测方法和装置。



背景技术:

在现实生活中,地图的区域都是一些不规则的图形,无法采用矩形、圆形等有明确计算面积的方法去计算大小再判断点击的区域范围,在android手机系统中,也同样面临这种不规则区域检测的问题,对于用户点击的点在哪个区域范围(比如说用户点击的点是不是在广东省这块区域上)内就是本方法要解决的问题,现有技术中不规则区域数据处理方案主要有两种。

方案一:采用像素图,每个区域都生成不同颜色或图片的像素图,按照层次关系叠加,非区域部分以透明像素点代替,当点击时判断点击点的像素值,如果为透明则忽略后继续将事件传递给下一层,直到捕获非透明像素点后将事件消费,完成区域的检测方案。

方案二:利用反射原理,获得android内部未公开类的方法,从而获得矢量图解析的能力,再根据区域范围实现检测。

采取像素图来实现区域检测的方案,虽然原理简单,但工作量大,且需要ui设计人员配合生成不同区域的图片,由于需要透明值,图片的质量会偏大,一旦区域多的话图片随之增多,严重影响性能,与ui的协调沟通成本也会增加,同时复用性也不强,可扩展性差。假如图片质量过小,在放大时会造成颗粒状,严重影响观感,质量大又会影响性能。

采用反射的方式性能较低,同时具有很大的不确定性,android内部未公开类随时有可能在下一版本发生变化,导致反射失败,从而限定了android版本的选择,兼容性太差,不利于升级。



技术实现要素:

有鉴于此,本发明提供一种基于android的不规则区域矢量图动态检测方法,该方法支持区域动态检测,解决了区域检测中图片质量过多过大问题,避免了反射方式造成的性能影响、兼容性差等问题,提高了技术的可扩展性,解决了区域放大失真问题。

为解决上述技术问题,一方面,本发明提供一种基于android的不规则区域矢量图动态检测方法,所述方法包括:将第一图形格式的图形数据转换为vector矢量图数据;解析所述vector矢量图数据,得到路径对象;基于所述路径对象进行绘制。

根据本发明实施例的基于android的不规则区域矢量图动态检测方法,通过将第一图形格式的图形数据转换为vector矢量图数据,能无限放大不失真,同时减少内存消耗,提高可扩展性,轻量又高效,兼容性强,支持采用region进行区域划分和检测。

根据本发明上述实施例的android的不规则区域矢量图动态检测方法,还可以具有如下附加的技术特征:

根据本发明的一个实施例,所述方法还包括:为所述矢量图设置缩放矩阵。

根据本发明的一个实施例,所述方法还包括:基于用户点击的点的坐标、所述缩放矩阵、位移以及旋转度,计算得到原点坐标。

根据本发明的一个实施例,所述方法还包括:利用region类检测所述原点坐标所在的区域。

根据本发明的一个实施例,所述方法还包括:解析所述vector矢量图数据,得到区域名称以及图形大小;重新配置所述路径对象、所述区域名称以及所述图形大小,以便得到自定义的矢量图。

第二方面,本发明实施例提供一种基于android的不规则区域矢量图动态检测装置,包括:转换模块,用于将第一图形格式的图形数据转换为vector矢量图数据;解析模块,用于解析所述vector矢量图数据,得到路径对象;基于所述路径对象进行路径绘制。

根据本发明的一个实施例,所述装置还包括:缩放模块,用于为所述矢量图设置缩放矩阵。

根据本发明的一个实施例,所述装置还包括:坐标计算模块,用于基于用户点击的坐标、所述缩放矩阵、位移以及旋转度,计算得到原点坐标。

根据本发明的一个实施例,所述装置还包括:区域检测模块,用于利用region类检测所述原点坐标所在的区域。

根据本发明的一个实施例,所述解析模块还用于:解析所述vector矢量图数据,得到区域名称以及图形大小;所述装置还包括自定义配置模块,用于重新配置所述路径对象、所述区域名称以及所述图形大小,以便得到自定义的矢量图。

附图说明

图1为本发明实施例中基于android的不规则区域矢量图动态检测方法的流程图;

图2为本发明实施例中基于android的不规则区域矢量图动态检测方法的一个使用示意图;

图3为本发明实施例中基于android的不规则区域矢量图动态检测方法的又一个使用示意图。

图4为本发明实施例中基于android的不规则区域矢量图动态检测装置的示意图;

图5为本发明实施例中电子设备的示意图。

附图标记:

基于android的不规则区域矢量图动态检测方法100;

基于android的不规则区域矢量图动态检测装置200;转换模块210;解析模块220;

电子设备300;

存储器310;操作系统311;应用程序312;

处理器320;网络接口330;输入设备340;硬盘350;显示设备360。

具体实施方式

下面将结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。

如图1所示,本发明实施例的基于android的不规则区域矢量图动态检测方法100包括:将第一图形格式的图形数据转换为vector矢量图数据;解析所述vector矢量图数据,得到路径对象;基于所述路径对象进行绘制。

具体而言,首先获取不规则区域的第一图形格式,第一图形格式可以是svg(scalablevectorgraphics,可缩放矢量图形),svg可从网络上获取或者通过美工设计获取,矢量图性能更加优越,占用内存更小,同时androidstudio(谷歌官方集成开发环境)集成开发环境也提供了将svg转为android平台可用的vector(一种android平台可识别的矢量图)矢量图数据,但android本身并不开放对vector数据解析的相关接口,在基于android的不规则区域矢量图动态检测方法100中,利用androidstudio自带的工具将svg转换为android平台可用的vector矢量图数据,svg使用广泛,可用性强。当vector矢量图数据准备好后,对vector矢量图数据进行解析,以得到路径对象(即pathdata)并将其绘制在画布上,最后基于所述路径对象进行路径绘制从而得到vector矢量图。

由此,根据本发明实施例的基于android的不规则区域矢量图动态检测方法100,通过将第一图形格式的图形数据转换为vector矢量图数据,能无限放大不失真,同时减少内存消耗,提高可扩展性,轻量又高效,兼容性强,支持采用region(区域类)进行区域划分和检测。

根据本发明的一些具体实施例,所述方法还包括:为所述矢量图设置缩放矩阵,也就是说,矢量图需要通过矩阵来实现任意缩放,否则android会将其当做普通像素图来呈现,达不到任意缩放的效果。

优选地,所述方法还包括基于用户点击的点的坐标、所述缩放矩阵、位移以及旋转度,计算得到原点坐标。

需要说明的是,对不规则区域检测的判断,可以利用region来实现此功能,但图形经过位移缩放等操作后,检测区域位置也发生了较大改变,可利用中间坐标避免该问题。基于android的不规则区域矢量图动态检测方法100将变换后的点还原为原点的坐标,具体过程如下:

p’(x’,y’)->~scale(ds)->~translate(dx,dy)->~rotate(dr)->p(x,y)

其中,

p’(x’,y’)表示变换后的点的坐标(即用户点击的点),

scale(ds)表示进行ds比例的缩放,

translate(dx,dy)表示横轴dx,纵轴dy的位移,

rotate(dr)表示dr度的旋转,

~符号表示逆过程,最后得到原点p(x,y)的坐标。

根据本发明的一个实施例,所述方法还包括利用region类检测所述原点坐标所在的区域。

具体地,通过上述第四步的变换过程可得到原点p,这样不管用户对区域做何种操作(位移、缩放、旋转),都能实时动态地通过计算得到原点p的坐标,再通过region(android的区域类操作对象)可以检测原点p所在区域的对象信息,从而提示用户当前点击的区域名称。这其中涉及到两个坐标系,一个是原图的坐标系,一个是屏幕的坐标系,如图2和图3所示,屏幕中的b点位置可以通过上述方法动态计算得到a点的位置,从而实现区域动态检测,经过平移缩放后仍能精确检测到点击的位置区域。

根据本发明的一个实施例,所述方法还包括:解析所述vector矢量图数据,得到区域名称以及图形大小;重新配置所述路径对象、所述区域名称以及所述图形大小,以便得到自定义的矢量图。

也就是说,获取vector矢量图数据后主要关注pathdata,name,viewportwidth,viewportheight这几个参数。

以下是矢量图数据其中一个片段(vector的具体语法不在本发明讨论范围内,故不作详细阐释):

pathdata是主要的区域路径,name是对区域作区分,viewportwidth和viewportheight是原始图形的大小。

知晓了vector矢量图数据的语法之后用户可以通过手动修改vector矢量图数据里的参数实现自定义的任意区域图形的检测以及自定义任意区域颜色,减少与ui设计人员的沟通,也减少ui设计人员的工作量,从而提高效率,便于修改模块的区域的颜色、名称、路径等。

需要说明的是,在android7.0版本上公开了路径解析类pathparser,利用这个类提供的能力就能将vector数据转化为一条条路径对象,从而使用canvas(画布对象)绘制在画布上。由于此pathparser类在外部可以获取到,为了兼容性,可以直接将此类抽取出来,这样即使低于7.0版本也可以正常使用。通过vector的解析后获取pathdata,name,viewportwidth,viewportheight,其中pathdata用于绘制路径,name用于显示区域名称,viewportwidth和viewportheight用于原图的大小。实现对矢量图的自定义功能,可以适应于任意形状、大小、名称的规则或不规则区域数据处理。

总而言之,根据本发明实施例的基于android的不规则区域矢量图动态检测方法100,通过将第一图形格式的图形数据转换为vector矢量图数据,能无限放大不失真,同时减少内存消耗,提高可扩展性,轻量又高效,兼容性强,能够支持采用region进行区域检测。

根据本发明第二方面实施例的基于android的不规则区域矢量图动态检测装置200包括转换模块210和解析模块220。

具体地,如图4所示,转换模块210用于将第一图形格式的图形数据转换为vector矢量图数据;解析模块220用于解析所述vector矢量图数据,得到路径对象,基于所述路径对象进行路径绘制。

换言之,转换模块210首先获取不规则区域的第一图形格式并将第一图形格式转换为android平台可用的vector矢量图数据,svg使用广泛,可用性强。当vector矢量图数据准备好后,解析模块220对vector矢量图数据进行解析,以得到路径对象(即pathdata)并绘制在画布上,最后基于所述路径对象进行路径绘制从而得到vector矢量图。

由此,根据本发明实施例的基于android的不规则区域矢量图动态检测装置200,通过转换模块210将第一图形格式转化成vector矢量图数据,通过解析模块220对vector矢量图数据进行解析并基于路径对象进行路径绘制从而得到vector矢量图,该装置性能损耗少,可扩展性高,可实现任意不规则区域检测。

根据本发明的一个实施例,所述装置还包括缩放模块,缩放模块用于为所述矢量图设置缩放矩阵。

也就是说,矢量图需要通过矩阵来实现任意缩放,否则android会将其当做普通像素图来呈现,达不到任意缩放的效果,采用矢量图,能无限放大不失真,同时减少内存消耗,对android系统而言,能大大减少apk(androidpackage,即android安装包)的大小,轻量又高效。

根据本发明的又一个实施例,所述装置还包括坐标计算模块,坐标计算模块用于基于用户点击的坐标、所述缩放矩阵、位移以及旋转度,计算得到原点坐标。

具体地,计算过程如下:

p’(x’,y’)->~scale(ds)->~translate(dx,dy)->~rotate(dr)->p(x,y)

其中,

p’(x’,y’)表示变换后的点的坐标(即用户点击的点),

scale(ds)表示进行ds比例的缩放,

translate(dx,dy)表示横轴dx,纵轴dy的位移,

rotate(dr)表示dr度的旋转,

~符号表示逆过程,最后得到原点p(x,y)的坐标。

优选地,所述装置还包括区域检测模块,区域检测模块用于利用region类检测所述原点坐标所在的区域。

换言之,通过计算模块可得到原点p,这样不管用户对区域做何种操作(位移、缩放、旋转),都能实时动态地通过计算得到原点p的坐标,再通过region(android的区域类操作对象)可以检测原点p所在区域的对象信息,从而提示用户当前点击的区域名称。这其中涉及到两个坐标系,一个是原图的坐标系,一个是屏幕的坐标系。

在本发明的一个实施例中,所述解析模块220还用于:解析所述vector矢量图数据,得到区域名称以及图形大小。所述装置还包括自定义配置模块,用于重新配置所述路径对象、所述区域名称以及所述图形大小,以便得到自定义的矢量图。

也就是说,获取vector矢量图数据后解,析模块还用于关注pathdata,name,viewportwidth,viewportheight这几个参数。

以下是矢量图数据其中一个片段(vector的具体语法不在本方案讨论范围内,故不作详细阐释):

pathdata是主要的区域路径,name是对区域作区分,viewportwidth和viewportheight是原始图形的大小。

知晓了vector矢量图数据的语法之后用户可以通过手动修改vector矢量图数据里的参数实现自定义的任意区域图形的检测以及自定义任意区域颜色,这样使得本方案具有非常灵活的自定义功能,比如修改模块的区域的颜色、名称、路径等。

需要说明的是,在android7.0版本上公开了路径解析类pathparser,利用这个类提供的能力就能将vector数据转化为一条条路径对象,从而使用canvas(画布对象)绘制在画布上。由于此pathparser类在外部可以获取到,为了兼容性,可以直接将此类抽取出来,这样即使低于7.0版本也可以正常使用。通过vector的解析后获得pathdata,name,viewportwidth,viewportheight,其中,pathdata用于绘制路径,name用于显示区域名称,viewportwidth和viewportheight用于原图的大小。该基于android的不规则区域矢量图动态检测装置200实现对矢量图的自定义功能,可以适应于任意形状、大小、名称的规则或不规则区域数据处理。

另外,本发明实施例还提供了一种计算机存储介质,所述计算机存储介质包括一条或多条计算机指令,所述一条或多条计算机指令在执行时实现上述任一所述的基于android的不规则区域矢量图动态检测方法100。

如图5所示,本发明实施例提供了一种电子设备300,包括存储器310和处理器320,所述存储器310用于存储一条或多条计算机指令,所述处理器320用于调用并执行所述一条或多条计算机指令,从而实现上述任一所述的方法100。

也就是说,电子设备300包括:处理器320和存储器310,在所述存储器310中存储有计算机程序指令,其中,在所述计算机程序指令被所述处理器运行时,使得所述处理器320执行上述任一所述的方法100。

进一步地,如图5所示,电子设备300还包括网络接口330、输入设备340、硬盘350、和显示设备360。

上述各个接口和设备之间可以通过总线架构互连。总线架构可以是可以包括任意数量的互联的总线和桥。具体由处理器320代表的一个或者多个中央处理器(cpu),以及由存储器310代表的一个或者多个存储器的各种电路连接在一起。总线架构还可以将诸如外围设备、稳压器和功率管理电路等之类的各种其它电路连接在一起。可以理解,总线架构用于实现这些组件之间的连接通信。总线架构除包括数据总线之外,还包括电源总线、控制总线和状态信号总线,这些都是本领域所公知的,因此本文不再对其进行详细描述。

所述网络接口330,可以连接至网络(如因特网、局域网等),从网络中获取相关数据,并可以保存在硬盘350中。

所述输入设备340,可以接收操作人员输入的各种指令,并发送给处理器320以供执行。所述输入设备340可以包括键盘或者点击设备(例如,鼠标,轨迹球(trackball)、触感板或者触摸屏等。

所述显示设备360,可以将处理器320执行指令获得的结果进行显示。

所述存储器310,用于存储操作系统运行所必须的程序和数据,以及处理器320计算过程中的中间结果等数据。

可以理解,本发明实施例中的存储器310可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(rom)、可编程只读存储器(prom)、可擦除可编程只读存储器(eprom)、电可擦除可编程只读存储器(eeprom)或闪存。易失性存储器可以是随机存取存储器(ram),其用作外部高速缓存。本文描述的装置和方法的存储器310旨在包括但不限于这些和任意其它适合类型的存储器。

在一些实施方式中,存储器310存储了如下的元素,可执行模块或者数据结构,或者他们的子集,或者他们的扩展集:操作系统311和应用程序312。

其中,操作系统311,包含各种系统程序,例如框架层、核心库层、驱动层等,用于实现各种基础业务以及处理基于硬件的任务。应用程序312,包含各种应用程序,例如浏览器(browser)等,用于实现各种应用业务。实现本发明实施例方法的程序可以包含在应用程序312中。

上述处理器320,当调用并执行所述存储器310中所存储的应用程序和数据,具体的,可以是应用程序312中存储的程序或指令时,将第一图形格式的图形数据转换为vector矢量图数据;解析所述vector矢量图数据,得到路径对象;基于所述路径对象进行路径绘制。

本发明上述实施例揭示的方法可以应用于处理器320中,或者由处理器320实现。处理器320可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器320中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器320可以是通用处理器、数字信号处理器(dsp)、专用集成电路(asic)、现成可编程门阵列(fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件,可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本发明实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器310,处理器320读取存储器310中的信息,结合其硬件完成上述方法的步骤。

可以理解的是,本文描述的这些实施例可以用硬件、软件、固件、中间件、微码或其组合来实现。对于硬件实现,处理单元可以实现在一个或多个专用集成电路(asic)、数字信号处理器dsp)、数字信号处理设备(dspd)、可编程逻辑设备(pld)、现场可编程门阵列(fpga)、通用处理器、控制器、微控制器、微处理器、用于执行本申请所述功能的其它电子单元或其组合中。

对于软件实现,可通过执行本文所述功能的模块(例如过程、函数等)来实现本文所述的技术。软件代码可存储在存储器中并通过处理器执行。存储器可以在处理器中或在处理器外部实现。

具体地,处理器320还用于读取所述计算机程序,执行上述任一所述的方法。

在本申请所提供的几个实施例中,应该理解到,所揭露方法和装置,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理包括,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。

上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述收发方法的部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-onlymemory,简称rom)、随机存取存储器(randomaccessmemory,简称ram)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明所述原理的前提下,还可以作出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

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