一种安卓电视上的3D阴影生成方法与流程

文档序号:16202342发布日期:2018-12-08 06:44阅读:275来源:国知局
一种安卓电视上的3D阴影生成方法与流程

本公开涉及安卓电视应用领域,尤其涉及一种安卓电视上的3d阴影生成方法。

背景技术

随着安卓智能电视的大面积普及,安卓电视上的音视频应用也在快速增长,按照google官方定制的materialdesign交互规范,一个承载内容元素的view被定义为卡片(card),为提高视觉效果,google工程师设计出cardview,cardview具备多种特效属性:设置圆角,3d阴影,背景色等,目前cardview被广泛运用于安卓app中,如下图3-1中带有“冰棒行动”字样的矩形卡片就是典型的cardview。

cardview中使用最为广泛的一个特效属性就是3d阴影,如图3-1所示,卡片底部的阴影深度(z-ev)最大,左右两边略浅,顶部阴影深度最浅,这种阴影在不同方向上的深浅不一从而营造出一种3d悬浮效果,也就是3d阴影。cardview是google于2015年随support-v7包发布的,由于是2015年以后才诞生的,因此其3d阴影属性依赖于安卓5.0或以上版本系统的api,这就导致在安卓5.0以下系统下无法正常生成3d阴影的问题,为解决安卓5.0以下系统3d阴影的显示问题,安卓开发领域采用目前广泛使用的2种方法:

一种是采用重绘机制生成阴影,这种方案的优点是可兼容低版本安卓系统,且可动态生成可随时关闭阴影效果,但缺点是耗费资源;

另一种是使用带3d阴影效果的图片,这种方案的优点是使用方便,无需编写大量兼容低版本的函数,但缺点是无法动态关闭阴影效果且阴影会挤占卡片的空间。



技术实现要素:

针对上述2种方案中存在的解决低版本系统的3d阴影生成问题,本公开提出一种重绘机制结合点九图(.9图)的方法,用于解决重绘机制生成3d阴影资源耗费高,带3d阴影阴影图片无法实现阴影效果的动态关闭等问题。

本公开一方面提供一种安卓电视上的3d阴影生成方法,包括:首先,采用内容拉伸边界的方法为点九图(.9图)添加视觉边界;其次,通过识别所述点九图(.9图)的视觉边界,从而获得3d阴影区域的坐标值及内容区域的坐标值,其中,所述内容区域为所述视觉边界矩形坐标封闭的区域;最后,绘制所述内容区域及3d阴影区域,通过设置3d阴影区域透明度控制所述3d阴影区域的可见性。

可选地,添加点九图(.9图)视觉边界是在photoshop中进行处理的,且所述视觉边界颜色为纯红色。

可选地,通过识别所述点九图(.9图)的视觉边界,从而获得3d阴影区域的坐标值及内容区域的坐标值,识别方法包括:首先,使用bitmapfactoty将所述点九图(.9图)转化为grgb灰度图;其次,使用梯度法求得3组灰度梯度,其中红色梯度gr为:

gr=|r(x,y)-r(x+1,y+1)|+|r(x+1,y)+r(x,y+1)|

最后,对gr函数输入图像分辨率x×y参数,求得4条视觉边界的最大坐标值。

可选地,通过设置所述3d阴影区域的透明度控制所述3d阴影区域的可见性,包括:所述3d阴影区域的透明度取值为[0,1],当透明度取值为0时,表示关闭3d阴影,透明度取值为1时,表示开启3d阴影。

可选地,所述内容区域透明度设置为1,表示所述内容区域为全可见状态。

本发明另一方面提供一种电子设备,包括:处理器;存储器,其存储有计算机可执行程序,该程序在被所述处理器执行时,使得所述处理器执行:采用内容拉伸边界的方法为点九图(.9图)添加视觉边界;通过识别所述点九图(.9图)的视觉边界,从而获得3d阴影区域的坐标值及内容区域的坐标值,其中,所述内容区域为所述视觉边界矩形坐标封闭的区域;绘制所述内容区域及3d阴影区域,通过设置3d阴影区域透明度控制所述3d阴影区域的可见性。

可选地,添加点九图(.9图)视觉边界是在photoshop中进行处理的,且所述视觉边界颜色为纯红色。

可选地,通过识别所述点九图(.9图)的视觉边界,从而获得3d阴影区域的坐标值及内容区域的坐标值,包括:首先,使用bitmapfactoty将所述点九图(.9图)转化为grgb灰度图;其次,使用梯度法求得3组灰度梯度,其中红色梯度gr为:

gr=|r(x,y)-r(x+1,y+1)|+|r(x+1,y)+r(x,y+1)|

最后,对gr函数输入图像分辨率x×y参数,求得4条视觉边界的最大坐标值。

可选地,通过设置所述3d阴影区域的透明度控制所述3d阴影区域的可见性,包括:所述3d阴影区域的透明度取值为[0,1],当透明度取值为0时,表示关闭3d阴影,透明度取值为1时,表示开启3d阴影。

可选地,所述内容区域透明度设置为1,表示所述内容区域为全可见状态。

本公开的有益效果为:该方法使用带3d阴影效果的点九图(.9图),在需要3d阴影的时候绘制3d阴影区域,需要关闭3d阴影的时候采用重绘机制将3d阴影区域着色改为透明色,从而实现动态显示3d阴影的效果,同时,以点九图(.9图)的视觉边界来划分3d阴影区域,从而实现3d阴影区域与内容拉伸区域的分离,保证拉伸内容拉伸区域不会影响3d阴影区域,此外,点九图(.9图)的使用,使得3d阴影属性不存在低版本系统的兼容问题,且无需编写大量的api函数,由于采用有限的区域重绘(仅绘制3d区域),对资源的消耗也较低。

附图说明

为了更完整地理解本公开及其优势,现在将参考结合附图的以下描述,其中:

图1示意性示出了根据本公开的带3d阴影的cardview示意图;

图2示意性示出了根据本公开实施例的安卓电视上3d阴影生成方法的流程图;

图3示意性示出了根据本公开的内容区域与非内容区域的示意图;

图4示意性示出了根据本公开实施例的携带有内容拉伸边界的点九图(.9图);

图5示意性示出了根据本公开实施例的点九图(.9图)延上下左右四个方向拉伸后的效果示意图;

图6示意性示出了根据本公开实施例的携带有视觉边界和内容拉伸边界的点九图(.9图);

图7示意性示出了根据本公开实施例的3d阴影区域示意图;

图8示意性示出了根据本公开实施例的电子设备的框图。

具体实施方式

以下,将参照附图来描述本公开的实施例。但是应该理解,这些描述只是示例性的,而并非要限制本公开的范围。在下面的详细描述中,为便于解释,阐述了许多具体的细节以提供对本公开实施例的全面理解。然而,明显地,一个或多个实施例在没有这些具体细节的情况下也可以被实施。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本公开的概念。

在此使用的术语仅仅是为了描述具体实施例,而并非意在限制本公开。在此使用的术语“包括”、“包含”等表明了所述特征、步骤、操作和/或部件的存在,但是并不排除存在或添加一个或多个其他特征、步骤、操作或部件。

在此使用的所有术语(包括技术和科学术语)具有本领域技术人员通常所理解的含义,除非另外定义。应注意,这里使用的术语应解释为具有与本说明书的上下文相一致的含义,而不应以理想化或过于刻板的方式来解释。

在使用类似于“a、b或c等中至少一个”这样的表述的情况下,一般来说应该按照本领域技术人员通常理解该表述的含义来予以解释(例如,“具有a、b或c中至少一个的系统”应包括但不限于单独具有a、单独具有b、单独具有c、具有a和b、具有a和c、具有b和c、和/或具有a、b、c的系统等)。本领域技术人员还应理解,实质上任意表示两个或更多可选项目的转折连词和/或短语,无论是在说明书、权利要求书还是附图中,都应被理解为给出了包括这些项目之一、这些项目任一方、或两个项目的可能性。例如,短语“a或b”应当被理解为包括“a”或“b”、或“a和b”的可能性。

附图中示出了一些方框图和/或流程图。应理解,方框图和/或流程图中的一些方框或其组合可以由计算机程序指令来实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器,从而这些指令在由该处理器执行时可以创建用于实现这些方框图和/或流程图中所说明的功能/操作的装置。

因此,本公开的技术可以硬件和/或软件(包括固件、微代码等)的形式来实现。另外,本公开的技术可以采取存储有指令的计算机可读介质上的计算机程序产品的形式,该计算机程序产品可供指令执行系统使用或者结合指令执行系统使用。在本公开的上下文中,计算机可读介质可以是能够包含、存储、传送、传播或传输指令的任意介质。例如,计算机可读介质可以包括但不限于电、磁、光、电磁、红外或半导体系统、装置、器件或传播介质。计算机可读介质的具体示例包括:磁存储装置,如磁带或硬盘(hdd);光存储装置,如光盘(cd-rom);存储器,如随机存取存储器(ram)或闪存;和/或有线/无线通信链路。

本公开的实施例提供了一种安卓电视上3d阴影生成方法。

图2示意性示出了根据本公开实施例的安卓电视上3d阴影生成方法的流程图。

如图2所示,方法具体包括:

s1,采用内容拉伸边界的方法为点九图(.9图)添加视觉边界。

在上述操作s1中,将划分3d阴影区域的边界定义为视觉边界,如图3所示,黑色圆弧棱角边框以内的区域为内容区域,边框及边框以外的区域为非内容区域,边框的内边缘即为视觉边界,这是因为3d阴影所占据的空间区域通常是不会容纳内容元素的,该区域属于非内容展示区域,非内容展示区域在设备屏幕上是否渲染(绘制)出来并不影响app的正常运行和用户交互。

另外,由于正常的点九图(.9图)是不带视觉边界的,也没有视觉边界,只有内容拉伸边界,因此本公开仿照内容拉伸边界来处理点九图,给其添加视觉边界。安卓系统在识别点九图(.9图)时,除了识别点九图(.9图)的后缀名(“.9.png”)外,还会扫描读取图片中所标定的内容拉伸边界:

横向内容拉伸边界,以高度为1px,颜色为#ff000000的纯黑色线段;纵向内容拉伸边界,以宽度为1px,颜色为#ff000000的纯黑色线段;

如图4所示,位于矩形边缘的4条阴影线段就构成了图片的内容拉伸边界,图5为沿着上下左右四个方向拉伸后预览效果。

因此,采用类似内容拉伸边界的思想,来为点九图(.9图)添加视觉边界,视觉边界和内容拉伸边界类似,但颜色为纯红色(#ffff0000),如图6所示,位于矩形边缘上的白色线段为视觉边界。此外,添加点九图(.9图)视觉边界是在photoshop中进行处理。

其中,以点九图(.9图)的视觉边界来划分3d阴影区域,从而实现3d阴影区域与内容拉伸区域的隔离,这样无论怎么拉伸内容拉伸区域都不会影响3d阴影区域。

s2,通过识别所述点九图(.9图)的视觉边界,从而获得3d阴影区域的坐标值及内容区域的坐标值,其中,所述内容区域为所述视觉边界封闭的区域。

在上述操作s2中,采用rgb颜色提取的方式来获取3d阴影区域,由于3d阴影位于点九图(点9图为argb格式的位图)中,而位图(bitmap)由a(透明度)、r(红)、g(绿)、b(蓝)等亮度控件组成,因此,本方案将点九图(.9图)解析为argb色彩矩阵,然后将argb色彩矩阵转为gr、gg、gb三色灰度矩阵,然后使用梯度法进行提取,得到3组梯度,因点九图(.9图)视觉边界设置为纯红色,所以,其中gr对应的梯度图即为3d阴影区域的信息,gr组梯度中的每项即为一条视觉边界,一共4项,这4项组成的即为3d阴影区域,具体实现方式如下:

s21:使用bitmapfactoty将点九图(.9图)转为grgb灰度图;

s22:使用梯度法求得3组灰度梯度,其中红色梯度gr为:

gr=|r(x,y)-r(x+1,y+1)|+|r(x+1,y)+r(x,y+1)|

s23:对gr函数输入的图像分辨率x×y参数,分别为[0,x]、[0,y]、[-y,0]、[-x,0],即求得4条视觉边界的最大坐标值,由该4条视觉边界矩形坐标(rect)所形成的矩形区域即为3d阴影区域。

s3,绘制所述内容区域及3d阴影区域,通过设置3d阴影区域透明度控制所述3d阴影区域的可见性。

在上述操作s3中,3d阴影为点九图中视觉边界以外的部分,因此3d阴影本身为位图资源,由于位图在安卓系统中的绘制是不可逆的,即一旦绘制就无法改变其大小因此为了解决3d阴影的可见性,改变其大小是不可行的,只能通过改变视觉边界外的3d阴影所在的区域的透明度(alpha),从而实现开启与关闭3d阴影。

在获取4个视觉边界3d阴影区域后,先绘制内容区域(4个视觉边界矩形坐标(rect)封闭的矩形区域,如图7所示的编号为1-4),并将内容区域的透明度设置为1,这样内容区域即为全可见状态。

绘制完内容区域后,再绘制视觉边界矩形坐标(rect)区域得到3d阴影区域,通过设置这四个矩形坐标(rect)区域即3d阴影区域的透明度(alpha)来控制其可见性,alpha取值为[0,1],0即为全透明,1为全可见,alpha为0即关闭3d阴影,alpha为1即开启3d阴影。

综上所述,本实施例提供一种安卓电视上的3d阴影生成方法,以点九图(.9图)的视觉边界来划分3d阴影区域,从而实现3d阴影区域与内容拉伸区域的隔离,保证无论怎么拉伸内容拉伸区域都不会影响3d阴影区域,同时,采用位图资源颜色点阵拾取的方式来识别点九图(.9图)的视觉边界,然后在重绘view时,改变3d阴影区域的alpha值,从而达到控制3d阴影的开启与关闭,实现动态显示3d阴影的效果,此外,点九图(.9图)的使用,使得3d阴影属性不存在低版本系统的兼容问题,且无需编写大量的api函数,由于采用有限的区域重绘(仅绘制3d区域),对资源的消耗也较低。

需要注意的是,图1所示仅为可以应用本公开实施例的场景的示例,以帮助本领域技术人员理解本公开的技术内容,但并不意味着本公开实施例不可以用于其他设备、系统、环境或场景。

图8示意性示出了根据本公开实施例的适于实现本公开的方法的电子设备的框图。图8示出的电子设备仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。

本公开提供了一种电子设备,如图8所示,该电子设备800包括处理器810和计算机可读存储介质820。该电子设备800可以执行根据图2所示的本公开实施例的方法。

具体地,处理器810例如可以包括通用微处理器、指令集处理器和/或相关芯片组和/或专用微处理器(例如,专用集成电路(asic)),等等。处理器810还可以包括用于缓存用途的板载存储器。处理器810可以是用于执行根据本公开实施例的方法流程的不同动作的单一处理单元或者是多个处理单元。

计算机可读存储介质820,例如可以是能够包含、存储、传送、传播或传输指令的任意介质。例如,可读存储介质可以包括但不限于电、磁、光、电磁、红外或半导体系统、装置、器件或传播介质。可读存储介质的具体示例包括:磁存储装置,如磁带或硬盘(hdd);光存储装置,如光盘(cd-rom);存储器,如随机存取存储器(ram)或闪存;和/或有线/无线通信链路。

计算机可读存储介质820可以包括计算机程序821,该计算机程序821可以包括代码/计算机可执行指令,其在由处理器810执行时使得处理器810执行根据本公开实施例的方法或其任何变形。

计算机程序821可被配置为具有例如包括计算机程序模块的计算机程序代码。例如,在示例实施例中,计算机程序821中的代码可以包括至少一个程序模块,例如包括模块821a、模块821b、……。应当注意,模块的划分方式和个数并不是固定的,本领域技术人员可以根据实际情况使用合适的程序模块或程序模块组合,当这些程序模块组合被处理器810执行时,使得处理器810可以执行根据本公开实施例的方法或其任何变形。

根据本公开的实施例,计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑磁盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本公开中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、有线、光缆、射频信号等等,或者上述的任意合适的组合。

附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

本领域技术人员可以理解,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合或/或结合,即使这样的组合或结合没有明确记载于本公开中。特别地,在不脱离本公开精神和教导的情况下,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合和/或结合。所有这些组合和/或结合均落入本公开的范围。

尽管已经参照本公开的特定示例性实施例示出并描述了本公开,但是本领域技术人员应该理解,在不背离所附权利要求及其等同物限定的本公开的精神和范围的情况下,可以对本公开进行形式和细节上的多种改变。因此,本公开的范围不应该限于上述实施例,而是应该不仅由所附权利要求来进行确定,还由所附权利要求的等同物来进行限定。

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