一种动态皮肤的实现方法

文档序号:6410560阅读:218来源:国知局
专利名称:一种动态皮肤的实现方法
技术领域
本发明涉及计算机动态图像数据处理技术,特别是涉及一种动态皮肤的实现方法。
背景技术
随着信息技术的发展,各种具有数据处理能力的电子设备,如电脑、笔记本电脑、移动终端等日益普及,给人们的学习、工作和生活带来较大的便利。众所周知,电子设备的运行需要硬件和软件的配合,特别是软件产品的重要性正越来越受到人们的重视。
通常,软件在运行时都会形成用户交互界面,便于接收用户的操作指令并且及时反馈操作结果。随着计算机图像处理技术的日益完善,目前已经出现多种皮肤(skin)设计技术来改善软件产品的用户使用体验。
通常,动态皮肤的实现可以提高用户对产品的认同感,现有技术中,实现皮肤界面元素的变化有多种方法。
一种现有技术的方法是通过定时器来实现图像序列(jpg序列或者bmp序列)的连续播放。由于bmp序列是一组连续的bmp图像,通过在这些图像之间的切换实现的动画效果如同电影胶片,但是bmp序列占用空间较大,并且需采用多个文件,所以制作不方便。
另一种现有技术则通过对静态图像的技术处理来实现静态图像表现形式的变化,从而达到界面元素的动态表现,比如通过调整亮度实现图像的闪动效果、和调整图像象素排列方式实现图像的旋转等等。
上述现有技术存在一些不足之处首先,其实现的是一种有限的图像变化;其次,对通过数字技术处理静态图像得到的动画来说,在某种程度上还对图像的格式和品质有着特殊的要求,这是由于需要对图像进行处理,所以这些图像的清晰度要好,并且图像的背景和前景要区别明显,便于将处理目标区分开。从而,上述现有技术无法得到用户的广泛应用,不适于应用在参与程度很高的皮肤的制作上。

发明内容
本发明解决的技术问题在于提供一种动态皮肤的实现方法,可以丰富皮肤的表现形式、增加皮肤制作中的自由度,改善用户体验。
为此,本发明解决技术问题的技术方案是提供一种动态皮肤的实现方法,包括以下步骤1)将动态图像作为动态皮肤元素封装至皮肤文件中;2)在皮肤建立过程中读取动态图像数据流;3)通过所述动态图像数据流提取图像;4)播放所述图像,实现皮肤的动态表现。
优选地,所述步骤1)中的封装具体是将动态图像封装成COM对象。
优选地,所述步骤4)中采用GDI+实现图像的播放。
优选地,所述步骤3)中的提取具体包括31)取得图像每帧的大小和帧的数目;32)取得图像第一帧的指针;33)判断是否达到帧之间的时间间隔;如果是,则进入步骤4);如果否,则继续等待;所述步骤4)中还包括判断图像是否播放完毕;如果是,则退出流程;如果否,则转入步骤41);41)取得下一帧的图像指针,随后转入步骤33)。
优选地,还包括当图像播放结束之后产生回调操作,用于进行播放结束后的响应。
优选地,所述回调操作是皮肤文件产生的COM事件。
优选地,在所述步骤2)的读动态皮肤元素之前还包括记录和保存当前操作;在所述步骤4)中,当播放结束后执行所述保存的操作。
优选地,在所述步骤4)中,启动定时器以定时检查判断图像的播放是否超时和检查图像是否播放完毕;当图像播放完毕后或者播放超时,产生播放完毕通知中止播放。
优选地,在所述步骤4)中,还包括4a)判断是否接收到皮肤图像播放成功消息;如果是,则进入步骤4b);如果否,则进入步骤4d);4b)通知对应图像启动成功;同时启动定时器;4c)判断图像是否播放完毕,或者播放超时;如果图像播放完毕或者超时,则转入步骤4d);如果未播放完毕且未超时,则继续等待;4d)结束图像播放,执行前述保存的操作。
优选地,所述动态图像是GIF图像文件。
相对于现有技术,本发明的有益效果是首先,由于本发明通过在皮肤上集成动态图像元素来改变皮肤的表现形式,可以克服现有的客户端界面比较单调的情况,从而给用户提供一个可以变化的皮肤,改善用户体验。其次,对于本发明的素材采用动态图像,即将动态图像作为皮肤元素,由于网络资源的存在,可以较大地丰富皮肤的表现形式,有着很大的应用前景。并且,由于动态皮肤元素可以在脚本中加以控制,所以用户在皮肤制作中的自由度将会有所增加,皮肤的表现形式可以更加的丰富。
此外,在本发明的优选实施例中,增加了一个COM事件,每次在图像播放结束的时候都会产生这个事件,用来处理一些图像播放结束后的操作,使得图像的播放更加的灵活;对于用户来说,这样的功能可以加强用户对播放过程的控制。
另外,由于本发明的优选实施例在皮肤中引入动态图片格式如GIF等来实现皮肤的动态效果,而GIF文件是一个文件,加上现在有很多软件可以制作GIF,所以本发明的实现比较简单,并且空间占用小。


图1是本发明动态皮肤的实现方法的流程图;图2是本发明读取GIF文件的实施例的流程图;图3是本发明实施例中启动和结束图像播放的流程图。
具体实施例方式
本发明主要的构思在于通过实现在皮肤上集成动态图像元素来改变皮肤的表现形式,给用户提供一个可以变化的皮肤。
请参阅图1,是本发明动态皮肤的实现方法的流程图。
步骤S1,将动态图像作为动态皮肤元素封装至皮肤文件中。
当前的皮肤模型是采用按钮(button)、图片(picture)等皮肤元素的拼接形成的一个完整界面。这些皮肤元素在工程中以COM(Component ObjectModel)的形式存在,所以如果将动态图像封装成一个COM对象并引入到皮肤模型元素中,就可以实现动态图像在皮肤上的表现。
所述动态图像格式可以是GIF等,所述COM封装就是封装一个GIF文件,由于GIF文件是一个文件,并且现在有很多软件可以制作GIF,所以相对于现有技术中占用空间较大并且需采用多个文件的bmp序列来说,其实现比较简单,并且空间占用小。
步骤S2,当在皮肤建立过程中读到动态皮肤元素时,根据步骤1)中所述皮肤文件读取动态图像数据流。
如前所述,GIF文件作为皮肤元素封装在皮肤文件中。当建立皮肤时,由建立皮肤的程序(逻辑)读取各种元素,当读取到其中包含动态皮肤元素时,则需要根据该皮肤文件中指定的路径读取动态图像数据流。
步骤S3,通过所述动态图像数据流提取图像;步骤S4,播放所述图像,实现皮肤的动态表现。
本发明的实施例中,采用GDI+技术进行图像的播放。
GDI+作为Windows XP的一个子系统,凭借其给用户带来的全新的用户体验,已经被得到广泛的运用。尤其是其中的多图片支持,为程序开发人员提供了一个比较方便安全的图像技术开发手段。由于该技术对应用平台没有多大的限制,只要系统中存在GDIplus.Dll就可以运行GDI+程序。但是,尽管在GDI+中提供了对GIF等具有动态效果的图像的支持,在程序中仍然需要对引入的图像文件进行解读。也就是说,虽然GDI+能支持图像格式,使得不需要去分析图像的压缩和图像的存储结构,但是里面的具体数据还是需要一一抽取。
请参阅图2,是本发明读取GIF文件的实施例的流程图。
步骤S11,读取动态图像数据流。
GIF图像是基于颜色列表的(即存储的数据是该点的颜色对应于颜色列表的索引值),最多只支持8位(256色)。在GIF文件内部分成许多存储块,用来存储多幅图像或者是决定图像表现行为的控制块,用以实现动画和交互式应用。
通常,一个GIF文件的结构可分为文件头(File Header)、GIF数据流(GIFData Stream)和文件终结器(Trailer)三个部分。文件头包含GIF文件署名(Signature)和版本号(Version);GIF数据流由控制标识符、图像块(Image Block)和其他的一些扩展块组成;文件终结器只有一个值为0x3B的字符(′;′)表示文件结束。
步骤S12,通过得到的图像数据流提取出图像。
步骤S13,取得图像每帧的大小和帧的数目。
步骤S14,取得图像第一帧的指针。
步骤S15,判断是否达到帧之间的时间间隔。如果是,则进入步骤S16;如果否,则继续等待。
步骤S16,在数据输出设备(如显示器等)上播放图像。
步骤S17,判断图像是否播放完毕。如果是,则退出流程;如果否,则进入步骤S18。
步骤S18,取得下一帧的图像指针,随后转入步骤S15。
由于动态图像的播放需要一段时间,所以如果需要做一些在动画播放结束后的操作,比如说button或者picture的隐藏、面板的显示等,就不可以将这些操作集成在一个函数体中,所述的函数体位于皮肤文件中,用于定义皮肤在得到消息后的行为方式。所以在GIF播放结束后要通知皮肤去执行一系列操作,作为一种结束的响应。
但是,GDI+播放的动态图像文件并没有实现这样的回调操作,因此需要将所述回调操作通过回调函数的形式添加到皮肤文件中,在GIF播放结束后通知皮肤去做一些结束后的操作。同时,为了使皮肤中的GIF播放具有更好的扩展性和用户的可控性,需要将回调函数交给皮肤的脚本处理。
本实施例中,为了实现这一功能,增加一个COM事件,每次在GIF播放结束的时候都会产生这个COM事件。实现该事件可以处理一些GIF播放结束后的操作,使得GIF的播放更加的灵活。对于用户来说,这样的功能可以加强用户对播放的过程控制。例如,可以在该事件中实现再次触发GIF播放从而实现GIF的连续播放等功能。
所述播放结束指的是GIF运行到最后一帧或者被暂停。
在动态皮肤的表现中,启动动画和结束动画是一个比较重要的表现。本实施例中,通过中断并保存当前的操作而去优先执行动画播放(所述动画播放是指前面的在输出设备上播放图像)来实现的。并且在动画的播放过程中,本实施例通过一个定时器来等待动画结束时继续执行保存的操作。同时,本实施例还产生一个判断动画播放结束的标志,如果播放结束或者动画播放超时,将会自动执行前述保存的操作。
请参阅图3,是本发明的实施例中启动和结束播放的流程图。
步骤S21,中断当前操作,进入皮肤文件中需要播放动画的函数体。
步骤S22,记录和保存当前的操作,以便后继处理。
步骤S23,启动动画。
步骤S24,判断是否接收到皮肤动画播放成功消息;如果是,则进入步骤S25;如果否,则转入步骤S27。
步骤S25,通知对应动画启动成功;同时进入步骤S31,启动定时器。
步骤S26,当动画结束时通知播放完毕。
步骤S32,在启动定时器后进行等待。
步骤S33,判断动画是否播放完毕,或者播放超时;如果动画播放完毕或者超时,则转入步骤S27;如果,未播放完毕且未超时,则继续等待。
步骤S27,执行前述保存的操作。
综上所述,本发明在皮肤中引入动态图像,所述动态图像在皮肤上作为一个皮肤元素;并且根据需要在进行图像的播放;通过回调操作来实现动态皮肤元素在皮肤中的消息传递,例如可以在其中实现再次触发GIF播放从而实现GIF的连续播放等功能;结合定时器,也可以实现动态图像的连续播放,完成皮肤的动态效果。
在上述实施例中,本发明采用GIF图像进行详细描述。可以理解,本发明并不限于GIF图像,其他具有动态效果的图像格式文件也适用本发明的动态皮肤实现方法。
以上所述仅仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
权利要求
1.一种动态皮肤的实现方法,其特征在于,包括以下步骤1)将动态图像作为动态皮肤元素封装至皮肤文件中;2)在皮肤建立过程中读取动态图像数据流;3)通过所述动态图像数据流提取图像;4)播放所述图像,实现皮肤的动态表现。
2.根据权利要求1所述的动态皮肤的实现方法,其特征在于所述步骤1)中的封装具体是将动态图像封装成COM对象。
3.根据权利要求1所述的动态皮肤的实现方法,其特征在于所述步骤4)中采用GDI+实现图像的播放。
4.根据权利要求1所述的动态皮肤的实现方法,其特征在于,所述步骤3)中的提取具体包括31)取得图像每帧的大小和帧的数目;32)取得图像第一帧的指针;33)判断是否达到帧之间的时间间隔;如果是,则进入步骤4);如果否,则继续等待;所述步骤4)中还包括判断图像是否播放完毕;如果是,则退出流程;如果否,则转入步骤41);41)取得下一帧的图像指针,随后转入步骤33)。
5.根据权利要求1所述的动态皮肤的实现方法,其特征在于,还包括当图像播放结束之后产生回调操作,用于进行播放结束后的响应。
6.根据权利要求5所述的动态皮肤的实现方法,其特征在于所述回调操作是皮肤文件产生的COM事件。
7.根据权利要求1所述的动态皮肤的实现方法,其特征在于,在所述步骤2)的读动态皮肤元素之前还包括记录和保存当前操作;在所述步骤4)中,当播放结束后执行所述保存的操作。
8.根据权利要求7所述的动态皮肤的实现方法,其特征在于在所述步骤4)中,启动定时器以定时检查判断图像的播放是否超时和检查图像是否播放完毕;当图像播放完毕后或者播放超时,产生播放完毕通知中止播放。
9.根据权利要求7所述的动态皮肤的实现方法,其特征在于,在所述步骤4)中,还包括4a)判断是否接收到皮肤图像播放成功消息;如果是,则进入步骤4b);如果否,则进入步骤4d);4b)通知对应图像启动成功;同时启动定时器;4c)判断图像是否播放完毕,或者播放超时;如果图像播放完毕或者超时,则转入步骤4d);如果未播放完毕且未超时,则继续等待;4d)结束图像播放,执行前述保存的操作。
10.根据权利要求1至9任一项所述的动态皮肤的实现方法,其特征在于所述动态图像是GIF图像文件。
全文摘要
本发明公开了一种动态皮肤的实现方法,包括以下步骤将动态图像作为动态皮肤元素封装至皮肤文件中;在皮肤建立过程中读取动态图像数据流;通过所述动态图像数据流提取图像;播放所述图像,实现皮肤的动态表现。本发明可以丰富皮肤的表现形式、增加皮肤制作中的自由度,并且其动态图像的实现比较简单,并且空间占用小。
文档编号G06F9/44GK1770098SQ200410052129
公开日2006年5月10日 申请日期2004年11月5日 优先权日2004年11月5日
发明者陆楠, 范质彬, 陈东明, 杜修杏, 陈光尧, 刘程伟 申请人:腾讯科技(深圳)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1