安卓系统下的可缩放矢量图形图片的加载方法和装置与流程

文档序号:11199011阅读:384来源:国知局
安卓系统下的可缩放矢量图形图片的加载方法和装置与流程

本发明涉及图像处理技术领域,具体而言涉及一种安卓系统下的可缩放矢量图形图片的加载方法和装置。



背景技术:

目前android系统里使用的图标都是采用png(可移植网络图形格式)位图的形式存在的。使用位图的好处是加载速度快,但是缺点是:存在不同机型的智能终端的适配问题。尤其是采用android系统的智能终端使用的屏幕分辨率类型多并且复杂,使用png位图形式的图标需要对不同分辨率分别进行适配,这造成了android系统下的应用程序的包体过大、适配不完美等问题。为此,google官方推出了vectordrawable,增加对可缩放矢量图形(svg)的支持,矢量图形的好处是放大不会失真,可以适应不同分辨率的屏幕。但是,google的vectordrawable同时存在以下的问题:研发工作人员需要增加一个步骤以便将svg图片转成vectordrawable,效率相对比较低,而且vectordrawable是绘制时才加载成图片,这对运行性能影响相对比较大。



技术实现要素:

本发明的目的在于提供一种安卓系统下的可缩放矢量图形图片的加载方法和装置,以改善上述问题。

本发明第一实施例提供了一种安卓系统下的可缩放矢量图形(svg)图片的加载方法,其包括:

从指定文件夹读取可缩放矢量图形数据;

使用在native层创建的解析方法对所读取的可缩放矢量图形数据进行解析;

将解析的数据传输给native层的skia绘图引擎以绘制成bitmap数据;

由应用层调用所述bitmap数据以执行对所读取的可缩放矢量图形图片的加载。

其中,所述指定文件夹是asset文件夹。

其中,使用原生开发工具包ndk在native层创建所述解析方法。

其中,所述应用层是java层。

其中,所述应用层采用java本地接口方式调用所述bitmap数据。

本发明第二实施例提供了一种安卓系统下的可缩放矢量图形图片的加载装置,其包括:

位于应用层的图片数据读取和传送模块、位于native层的解析模块、位于native层的skia绘图引擎模块、和位于应用层的加载模块,其中:

所述图片数据读取和传送模块用于从指定文件夹读取可缩放矢量图形数据并将其传送到位于native层的解析模块;

所述解析模块用于对接收的所述可缩放矢量图形数据进行解析并且将解析的数据传输给native层的skia绘图引擎;

所述skia绘图引擎模块用于将接收的解析数据绘制成bitmap数据;

所述加载模块用于调用所述bitmap数据以执行对所读取的可缩放矢量图形图片的加载。

其中,所述指定文件夹是asset文件夹。

其中,所述应用层是java层。

其中,所述加载模块采用java本地接口方式调用所述bitmap数据。

本发明第三实施例提供了一种存储设备,其中存储有多条指令,所述指令适于由处理器加载并执行第一实施例所述的方法。

本发明提供的在安卓系统下的可缩放矢量图形(svg)图片的加载方法和装置采用了在android系统的底层(native层)对可缩放矢量图形(svg)数据进行解析和绘制的方案,利用了底层执行效率高的特点,可以解决了在应用层对svg图片进行解析和绘制过程的效率低下、导致整体绘制过程比位图慢的问题,从而实现使用svg图片代替传统的png图片,解决了采用png图片所带来的屏幕分辨率的适配问题。

附图说明

图1是本发明第一实施例的一种安卓系统下的svg图片的加载方法的流程图;

图2是本发明第二实施例的一种安卓系统下的svg图片的加载装置的示意性框图。

具体实施方式

下面将结合本发明实施例和附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。

图1是本发明第一实施例提供的一种安卓系统下的svg图片的加载方法的流程图。如图1所示,本发明提供的安卓系统下的svg图片的加载方法包括:

s1:从指定文件夹读取可缩放矢量图形数据。

在安卓系统里,用一个专门存放图片资源的文件夹,其不会被二进制编译以保证所存放的图片资源可以被正常读取,该文件夹的名称是asset,因此这里所述指定文件夹是asset文件夹。所需要的可缩放矢量图形(svg)图片资源也是存放在该asset文件夹里。具体的读取方法是本领域的常规技术手段,例如通过使用getassets()来读取asset文件夹里存放的svg图片资源。svg图形是矢量图形,相对于普通的png像素图形,svg图形是基于矢量来表示图像的几何基元(形状、点、线条和多边形),例如一个圆,svg图形需要描述其位置(x,y)和半径r。

s2:使用在native层创建的解析方法对所读取的可缩放矢量图形(svg)数据进行解析。

在读取出可缩放矢量图形(svg)数据后,需要对该可缩放矢量图形(svg)数据进行解析。本发明采用的方法是将读取的可缩放矢量图形(svg)数据传送到native层,由在native层创建的解析方法对所读取的可缩放矢量图形(svg)数据进行解析。注意,这里使用的解析方法为本领域常用的公知解析方法。

众所周知,native层即原生层,是安卓系统的底层,在native层编写的代码由机器直接编译,不用经过虚拟机去执行,其效率会比较高。本发明就是使用安卓系统的原生开发工具包(androidndk)在native层使用c或c++语言编写解析svg数据的代码。简言之,使用原生开发工具包ndk在native层创建所述解析方法。

简单说,先使用原生开发工具包ndk在native层创建用于解析svg数据的方法。从指定文件夹里读取出的svg数据本身就是一个数据流,将该数据流直接当作参数传给在native层创建的解析方法来进行解析。

例如,一个圆形的svg图形的描述是:<circlecx="100"cy="50"r="40"stroke="#000000"stroke-width="2"fill="#ee0000"/>。在native层对这些数据流进行解析后,会形成用于绘制位图所需要的元素位置(100,50),半径r=40,描边是颜色#000000,圆的颜色为#ee0000等信息。

s3:将解析的数据传输给native层的skia绘图引擎以绘制成bitmap数据。

skia绘图引擎是native层的图片绘制工具,通过直接调用skia绘图引擎进行图片绘制,这会减少从上而下的调用层级,提高工作效率。而使用skia绘图引擎绘制成的所述位图数据是bitmap(位图文件)类,即位图文件数据。

以上一步的例子来继续说明绘制,将解析出的圆的信息:位置(100,50),半径r=40,描边是颜色#000000,圆的颜色为#ee0000等传给skia绘图引擎,通过该skia绘图引擎提供的圆形绘制方法skcanvas.drawcircle(100,50,40),画笔颜色为#ee0000,描边颜色为#000000,该skia绘图引擎能够绘制成该圆形的bitmap数据。

关于skia绘图引擎的使用方法是本领域技术人员熟知的技能,使用skia绘图引擎来绘制图片为常规技术手段,这里不再具体描述。

s4:由应用层调用所述bitmap数据以执行对所读取的可缩放矢量图形(svg)图片的加载。

在安卓系统里,所述应用层是java层。但java层(上层)要调用native层(底层)的数据时,通过java的java本地接口(jni)来完成。jni(javanativeinterface)是java语言提供的java和c/c++相互沟通的接口,java可以通过jni调用本地的c/c++代码。这样,应用层通过jni机制就可以调用在native层生成的bitmap数据以执行对所读取的svg图片的加载。

当需要加载存放在指定文件夹里的选中的svg图片时,使用本发明提供的加载方法,其流程是:将存放在文件名为asset的指定文件夹里的所选中的svg图片资源数据读取出,在native层(底层)对其进行解析和绘制,生成对应的bitmap数据,再由java层使用所述生成的bitmap数据,这样实现了对选中的svg图片的加载。

另外,在一个优选实施例中,如果所选中的svg图片是需要经常使用的,则java层可以将所生成的对应的bitmap数据缓存起来,这会避免多次执行解析和绘制的操作。

本发明提供的在安卓系统下的svg图片的加载方法采用了在android系统的底层(native层)对可缩放矢量图形(svg)数据进行解析和绘制的方案,利用了底层执行效率高的特点,可以解决了在应用层对svg图片进行解析和绘制过程的效率低下、导致整体绘制过程比位图慢的问题,从而实现使用svg图片代替传统的png图片,解决了采用png图片所带来的屏幕分辨率的适配问题。

图2是本发明第二实施例的一种安卓系统下的svg图片的加载装置的示意性框图。如图2所示,本发明提供的所述安卓系统下的svg图片的加载装置包括:

位于应用层的图片数据读取和传送模块、位于native层的解析模块、位于native层的skia绘图引擎模块、和位于应用层的加载模块,其中:

所述图片数据读取和传送模块用于从指定文件夹读取可缩放矢量图形(svg)数据并将其传送到位于native层的解析模块;

所述解析模块用于对接收的所述可缩放矢量图形(svg)数据进行解析并且将解析的数据传输给native层的skia绘图引擎;

所述skia绘图引擎模块用于将接收的解析数据绘制成bitmap数据;

所述加载模块用于调用所述bitmap数据以执行对所读取的可缩放矢量图形(svg)图片的加载。

其中,所述指定文件夹是asset文件夹。

其中,所述解析模块执行的解析方法是使用原生开发工具包开发的。

其中,所述应用层是java层。

其中,所述加载模块采用java本地接口方式调用所述bitmap数据。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的装置的具体工作过程,可以参考前述第一实施例描述的实施方法的对应过程,前述第一实施例中列举的例子和相关描述,同样适用于解释装置的工作过程,在此不再重复描述。

本发明提供的在安卓系统下的svg图片的加载装置采用了在android系统的底层(native层)对可缩放矢量图形(svg)数据进行解析和绘制的方案,利用了底层执行效率高的特点,可以解决了在应用层对svg图片进行解析和绘制过程的效率低下、导致整体绘制过程比位图慢的问题,从而实现使用svg图片代替传统的png图片,解决了采用png图片所带来的屏幕分辨率的适配问题。

本发明实施例所提供的svg图片的加载方法的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令可用于执行前面方法实施例中所述的方法,具体实现可参见方法实施例,在此不再赘述。

为此,本发明还提供了一种存储设备,其中存储有多条指令,所述指令适于由处理器加载并执行上述第一实施例及相应优选实施例所述的方法步骤。

所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是智能平板电脑,智能手机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom)、随机存取存储器(ram)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。

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