CN107220067A - 安卓系统下的可缩放矢量图形图片的加载方法和装置 - Google Patents
安卓系统下的可缩放矢量图形图片的加载方法和装置 Download PDFInfo
- Publication number
- CN107220067A CN107220067A CN201710512797.7A CN201710512797A CN107220067A CN 107220067 A CN107220067 A CN 107220067A CN 201710512797 A CN201710512797 A CN 201710512797A CN 107220067 A CN107220067 A CN 107220067A
- Authority
- CN
- China
- Prior art keywords
- data
- scalable vector
- read
- module
- parsing
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/20—Software design
- G06F8/24—Object-oriented
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T11/00—2D [Two Dimensional] image generation
- G06T11/60—Editing figures and text; Combining figures or text
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明提供了一种安卓系统下的可缩放矢量图形图片的加载方法和装置。所述加载方法包括:从指定文件夹读取可缩放矢量图形数据;使用在Native层创建的解析方法对所读取的可缩放矢量图形数据进行解析;将解析的数据传输给Native层的Skia绘图引擎以绘制成bitmap数据;由应用层调用所述bitmap数据以执行对所读取的可缩放矢量图形图片的加载。
Description
技术领域
本发明涉及图像处理技术领域,具体而言涉及一种安卓系统下的可缩放矢量图形图片的加载方法和装置。
背景技术
目前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层编写的代码由机器直接编译,不用经过虚拟机去执行,其效率会比较高。本发明就是使用安卓系统的原生开发工具包(Android NDK)在Native层使用C或C++语言编写解析SVG数据的代码。简言之,使用原生开发工具包NDK在Native层创建所述解析方法。
简单说,先使用原生开发工具包NDK在Native层创建用于解析SVG数据的方法。从指定文件夹里读取出的SVG数据本身就是一个数据流,将该数据流直接当作参数传给在Native层创建的解析方法来进行解析。
例如,一个圆形的SVG图形的描述是:<circle cx="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(Java Native Interface)是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)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
Claims (10)
1.一种安卓系统下的可缩放矢量图片的加载方法,其包括:
从指定文件夹读取可缩放矢量图形数据;
使用在Native层创建的解析方法对所读取的可缩放矢量图形数据进行解析;
将解析的数据传输给Native层的Skia绘图引擎以绘制成bitmap数据;
由应用层调用所述bitmap数据以执行对所读取的可缩放矢量图形图片的加载。
2.根据权利要求1所述的方法,其特征在于所述指定文件夹是asset文件夹。
3.根据权利要求1所述的方法,其特征在于使用原生开发工具包在Native层创建所述解析方法。
4.根据权利要求1所述的方法,其特征在于所述应用层是Java层。
5.根据权利要求1所述的方法,其特征在于所述应用层采用JAVA本地接口方式调用所述bitmap数据。
6.一种安卓系统下的可缩放矢量图片的加载装置,其包括:
位于应用层的图片数据读取和传送模块、位于Native层的解析模块、位于Native层的Skia绘图引擎模块、和位于应用层的加载模块,其中:
所述图片数据读取和传送模块用于从指定文件夹读取可缩放矢量图形数据并将其传送到位于Native层的解析模块;
所述解析模块用于对接收的所述可缩放矢量图形数据进行解析并且将解析的数据传输给Native层的Skia绘图引擎;
所述Skia绘图引擎模块用于将接收的解析数据绘制成bitmap数据;
所述加载模块用于调用所述bitmap数据以执行对所读取的可缩放矢量图形图片的加载。
7.根据权利要求5所述的装置,其特征在于所述指定文件夹是asset文件夹。
8.根据权利要求5所述的装置,其特征在于所述应用层是Java层。
9.根据权利要求5所述的装置,其特征在于所述加载模块采用JAVA本地接口方式调用所述bitmap数据。
10.一种存储设备,其中存储有多条指令,所述指令适于由处理器加载并执行权利要求1-5之一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710512797.7A CN107220067A (zh) | 2017-06-29 | 2017-06-29 | 安卓系统下的可缩放矢量图形图片的加载方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710512797.7A CN107220067A (zh) | 2017-06-29 | 2017-06-29 | 安卓系统下的可缩放矢量图形图片的加载方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN107220067A true CN107220067A (zh) | 2017-09-29 |
Family
ID=59950569
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710512797.7A Pending CN107220067A (zh) | 2017-06-29 | 2017-06-29 | 安卓系统下的可缩放矢量图形图片的加载方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107220067A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110473273A (zh) * | 2019-07-24 | 2019-11-19 | 广州视源电子科技股份有限公司 | 矢量图形的绘制方法、装置、存储介质及终端 |
CN111666318A (zh) * | 2019-03-05 | 2020-09-15 | 阿里巴巴集团控股有限公司 | 图形绘制方法和装置以及电子设备 |
CN112153117A (zh) * | 2020-09-07 | 2020-12-29 | 深圳创维-Rgb电子有限公司 | 一种图文数据传输方法、存储介质及终端 |
CN113704530A (zh) * | 2021-08-30 | 2021-11-26 | 北京思明启创科技有限公司 | 图像处理方法、装置、电子设备及计算机可读存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103617641A (zh) * | 2013-12-19 | 2014-03-05 | 国家电网公司 | 一种基于Android系统的电力设备SVG图符渲染方法 |
CN105302445A (zh) * | 2015-11-12 | 2016-02-03 | 小米科技有限责任公司 | 图形用户界面绘制方法及装置 |
CN106651992A (zh) * | 2016-11-18 | 2017-05-10 | 武汉斗鱼网络科技有限公司 | 优化Android资源图片的方法及系统 |
-
2017
- 2017-06-29 CN CN201710512797.7A patent/CN107220067A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103617641A (zh) * | 2013-12-19 | 2014-03-05 | 国家电网公司 | 一种基于Android系统的电力设备SVG图符渲染方法 |
CN105302445A (zh) * | 2015-11-12 | 2016-02-03 | 小米科技有限责任公司 | 图形用户界面绘制方法及装置 |
CN106651992A (zh) * | 2016-11-18 | 2017-05-10 | 武汉斗鱼网络科技有限公司 | 优化Android资源图片的方法及系统 |
Non-Patent Citations (1)
Title |
---|
CARL WEMOBILEDEV: ""Android微信上的SVG"", 《HTTPS://MP.WEIXIN.QQ.COM/S?__BIZ=MZAWNDY1ODY2OQ==&MID=207863967&IDX=1&SN=3D7B07D528F38E9F812E8DF7DF1E3322&UTM_SOURCE=ANDROIDWEEKLY.IO&UTM_MEDIUM=WEBSITE》 * |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111666318A (zh) * | 2019-03-05 | 2020-09-15 | 阿里巴巴集团控股有限公司 | 图形绘制方法和装置以及电子设备 |
CN111666318B (zh) * | 2019-03-05 | 2023-10-27 | 阿里巴巴集团控股有限公司 | 图形绘制方法和装置以及电子设备 |
CN110473273A (zh) * | 2019-07-24 | 2019-11-19 | 广州视源电子科技股份有限公司 | 矢量图形的绘制方法、装置、存储介质及终端 |
CN112153117A (zh) * | 2020-09-07 | 2020-12-29 | 深圳创维-Rgb电子有限公司 | 一种图文数据传输方法、存储介质及终端 |
CN112153117B (zh) * | 2020-09-07 | 2023-12-29 | 深圳创维-Rgb电子有限公司 | 一种图文数据传输方法、存储介质及终端 |
CN113704530A (zh) * | 2021-08-30 | 2021-11-26 | 北京思明启创科技有限公司 | 图像处理方法、装置、电子设备及计算机可读存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107220067A (zh) | 安卓系统下的可缩放矢量图形图片的加载方法和装置 | |
US7999805B2 (en) | System and method of converting edge record based graphics to polygon based graphics | |
CN110781923B (zh) | 特征提取方法及装置 | |
CN102945287B (zh) | Jsp数据自动分页jstl标签方法 | |
CN101763261A (zh) | 数据抽取、转换和加载方法、系统及装置 | |
CN105741227A (zh) | 渲染方法和装置 | |
CN107957911A (zh) | 组件调用的方法和装置、组件数据处理的方法和装置 | |
CN106547580B (zh) | 挂钩函数的方法、装置、移动终端及存储介质 | |
CN107450928B (zh) | 一种基于缓存技术的混合开发方法 | |
CN108089865A (zh) | 应用裁剪方法、装置及存储介质 | |
CN113010612B (zh) | 一种图数据可视化构建方法、查询方法及装置 | |
CN112181378B (zh) | 业务流程的实现方法及装置 | |
CN105242895B (zh) | 一种点阵文字显示方法及装置 | |
CN105867944A (zh) | Web前端数据操作层及其实现方法 | |
CN113010227A (zh) | 一种基于模型驱动的仿真平台实现方法 | |
CN107391272A (zh) | 多进程数据交互的方法和终端 | |
CN111427576A (zh) | 配置应用程序接口的方法、装置、存储介质及终端 | |
CN106293658A (zh) | 一种界面组件生成方法及其设备 | |
CN115906988A (zh) | 神经网络推理架构的创建方法、神经网络推理方法及装置 | |
CN106681735A (zh) | 基于字体生成动态图标的方法、装置及设备 | |
CN107402749A (zh) | 实现图片加载库的方法及装置 | |
CN110312990A (zh) | 配置方法及系统 | |
CN115617441A (zh) | 绑定模型和图元的方法、装置、存储介质及计算机设备 | |
CN113835748B (zh) | 基于html5的应用程序的打包方法、系统和可读介质 | |
CN102184105A (zh) | 基于组件方式的数据处理方法及数据中心系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20200903 Address after: 310052 room 508, floor 5, building 4, No. 699, Wangshang Road, Changhe street, Binjiang District, Hangzhou City, Zhejiang Province Applicant after: Alibaba (China) Co.,Ltd. Address before: 510627 Guangdong city of Guangzhou province Whampoa Tianhe District Road No. 163 Xiping Yun Lu Yun Ping square B radio tower 15 layer self unit 02 Applicant before: GUANGZHOU UC NETWORK TECHNOLOGY Co.,Ltd. |
|
TA01 | Transfer of patent application right | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20170929 |
|
RJ01 | Rejection of invention patent application after publication |