找回密码
 注册会员
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

[嵌入式/ARM] 基于MFC的SWF动画文件解析设计

[复制链接]
admin 发表于 2013-3-23 03:42:16 | 显示全部楼层 |阅读模式

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有账号?注册会员

×
摘  要: 提出了以MFC为开发工具对SWF动画文件进行解析开发,在分析SWF动画文件头结构和标签结构的基础上,设计了SWF动画文件的解析流程,并利用MFC优越的C++语言编程性能,在VS 2005开发平台上实现了对SWF动画环境、动画元素等信息的读取,为嵌入式WinCE操作系统下Flash播放器的研制奠定了坚实的基础。
关键词: SWF;解析;文件结构;MFC;VS 2005
    SWF作为Flash动画文件的一个重要分枝,是嵌入网页或独立播放的Flash影片压缩格式,具有非常优秀的压缩性、传输性与交互性,且因其能将矢量图、位图、音频、视频和深一层交互动作等有机地、灵活地结合在一起,所以该矢量图形文件格式的动画具有美观、新奇、交互性强的效果[1]。伴随着Flash技术的不断发展,SWF动画以其众多的优点被人们广泛应用于生活的方方面面,特别是在娱乐方面,更是占有相当大的市场[2-3]。同时,随着嵌入式技术的迅速发展,人们对生活娱乐的需求越来越大,其要求也越来越高,如对娱乐设备的便携性需求。然而,纵观国内外,嵌入式设备对SWF动画播放的支持存在很多不足,特别是嵌入式WinCE设备。因而,研究与解析SWF动画文件以获取文件中各个元素信息及识别动画信息,具有更加现实而迫切的意义。
 目前,已有人在对SWF动画文件开发上投入大量时间与精力,但大多是用其他开发工具进行开发,如借用具有强大数据库支持的Delphi为开发媒介[4]。嵌入式系统对编程语言的限制,使得如将以Pascal编程语言为媒介的Delphi开发平台开发的PC应用程序移植到嵌入式系统中,其难度及工作量将大大增加,不利于其后续的开发与研究;而MFC是微软基础类库,提供了所有一般C++编程的优点,且封装了成千上万行正确、优化和功能强大的Windows代码,能极大地加快程序开发速度及简化开发工作量,同时MFC还具有良好的移植性能[5-6]。因而,考虑到后续在嵌入式WinCE操作系统上开发SWF动画播放器,本文在分析与研究SWF动画文件的基础上,充分利用MFC的众多优点,以VS 2005为开发平台,C++语言为编程工具,实现了对SWF文件的解析与文件信息的读取,并利用MFC界面窗口的人性化,构建了一个简洁而直观的窗口对文件的解析信息进行显示。
1 解析方法设计
1.1 SWF结构简析

 SWF文件主要由文件头和多个标签组成,且最后以一个结束标签(End Tag)结束[7]。SWF文件的文件头具有一个标准格式,即包括了SWF文件的标识符、版本号、文件大小、影片尺寸、帧速率以及文件总帧数等信息,如表1所示。
    20121107051549959872883.gif
    而文件标签则主要包含标签头和标签数据两个部分信息。标签的数据部分紧跟在标签头后,承载了该标签所有的数据信息;标签头则主要包含标签类型(即标签的ID值)两方面的信息和该标签的长度。由于长度大小的差异,标签头存在短格式和长格式两种格式,详见2.2.2。当按照各自的功能划分时,又可将SWF文件中所有的标签划分为描述标签和控制标签。描述标签描述了SWF影片的内容,如形状、文本、图像、声音等;而控制标签可以对描述标签所定义的元素进行操作,以控制动画的播放。
1.2 解析工程架构设计
 简单分析SWF动画文件结构后,现对整个解析工程构架进行设计。图1所示为所设计的SWF文件解析工程整体构架图。该架构主要分为工程平台搭建与解析工程实现两大部分,前者为整个项目的基础,后者则是核心。
    20121107051549991112884.gif
    对于一个SWF文件而言,由于文件头信息是固定的,但其标签远不止一个,因而在解析工程实现进程中,解析数据的显示实现采用了分开显示的方法,即对于文件头数据边解析边显示;而对于标签数据则是边解析边存储,当所有标签全解析完成后再显示。
2 解析的实现
 MFC(Microsoft Foundation Class Library)实现了对应用程序概念的封装,能为Windows应用程序开发提供程序控制框架,并能完成一定的预定义或事件和消息处理等。根据图1所示的解析流程图,在VS 2005程序开发平台下利用MFC编程实现对SWF文件的解析。
2.1 工程平台搭建
 在VS 2005开发平台上,新建一个基于对话框的MFC项目工程,图2所示为新建项目工程中的一个工程设置界面。
    20121107051550037992885.gif
   
 项目工程设置完毕后,为方便而直观地呈现本应用程序的解析结果,本文在对SWF文件进行解析前,先对应用程序显示界面进行了设计。该界面设计主要分为功能按钮和窗口显示两个部分。功能按钮部分实现“打开”、“退出”、“确定”以及“取消”等操作,而窗口显示部分则完成对SWF文件解析信息的显示功能。
2.2 解析工程实现
 当搭建完项目工程平台并设计完应用程序显示界面外观后,接下来进行本项目工程的核心工作--实现SWF文件解析。此处涉及显示界面通信与解析主程序两方面的程序编写与功能实现,其中,解析主程序为本项目工程的重点部分。
2.2.1 显示界面的通信
 显示界面主要是与解析主程序通信,以实现对SWF文件解析完成后的结果显示。为减小通信操作的复杂度,在程序编写时充分使用MFC所封装的消息机制及程序参变量存储等方式,将文件解析所得数据传送到显示界面相应显示部分。
 以SWF文件的选中与打开为例,显示解析界面部分主要通过编程使用MFC中封装的CFileDialog类,定义一个文件对话框对象lpszOpenFile来完成对SWF文件的过滤选取操作。当点击界面中的“打开”按钮在过滤框中选中需解析的SWF文件后,再点击界面中的“确定”按钮,lpszOpenFile实例化对象就可通过MFC封装的消息机制返回得到已选中打开SWF文件的路径参数。将此路径作为参变量传入到解析主程序的文件打开接口后,即可在文件解析主程序中实现对SWF文件打开、存盘及后续的数据解析操作。
2.2.2 解析核心的实现
 如上,解析主程序开始前,先将解析界面已选中的SWF文件以二进制读写方式打开。文件被成功打开之后,开始完成SWF文件解析的第一步--文件头解析实现。
 如表1所示,SWF文件头一般以0x46、0x57、0x53(FWS)或0x43、0x57、0x53(CWS)开始。使用Windows API函数fread读取并存储文件头的前3个字节,若该字节内容为“FWS”,则表示未被压缩;否则,则表示文件被压缩过,此时如要正确解析该文件,就需要先调用ZLIB解压包,对从文件头第9个字节直至文件结束的所有数据进行解压,解压还原后的数据操作即与“FWS”所对应数据处理相一致。
 紧接文件头前3个字节处理之后的数据操作如下:读取1 B的版本号信息及4 B的文件长度信息,以及帧尺寸RECT数据。其中,RECT型数据是从第9个字节开始的,其数据结构如表2所示。由于该类型数据大小不确定,因而该部分数据的分析很关键。分析及计算RECT数据占用总字节大小过程如图3所示,式(1)为Buff2大小的计算方法。
    20121107051550084862886.gif
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2025-1-26 05:54 , Processed in 0.058260 second(s), 11 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表