FLIC动画文件的播放程序设计

上传人:l****6 文档编号:38056524 上传时间:2018-04-26 格式:DOC 页数:8 大小:42KB
返回 下载 相关 举报
FLIC动画文件的播放程序设计 _第1页
第1页 / 共8页
FLIC动画文件的播放程序设计 _第2页
第2页 / 共8页
FLIC动画文件的播放程序设计 _第3页
第3页 / 共8页
FLIC动画文件的播放程序设计 _第4页
第4页 / 共8页
FLIC动画文件的播放程序设计 _第5页
第5页 / 共8页
点击查看更多>>
资源描述

《FLIC动画文件的播放程序设计 》由会员分享,可在线阅读,更多相关《FLIC动画文件的播放程序设计 (8页珍藏版)》请在金锄头文库上搜索。

1、1FLIC 动画文件的播放程序设计 Autodesk 公司的三维动画设计软件 3DS 在我国已广泛使用,其良好的性能为计算机专家和艺术家所肯定。其动画存储文件 FLIC 也给系统提供了存储和显示的方便。下面具体分析 FLIC 文件的格式及播放程序的设计。一、FLIC 文件格式的概述FLIC 文件事实上是对一个静止画面序列的描述,连续显示这一序列便可在上产生动画效果。FLIC 文件结构简洁,弹出速度快,虽然每种基色最多只有 256 级灰度,图像深度只有 8 位,但使用起来很方便。FLIC 文件有两种类型:FLI 文件和 FLC 文件。FLC 文是 FLI 文件的进一步发展,它采用更高效的压缩技术

2、,且其分辨率也不仅限于 320200。我们在 PC 上经常使用的 FLI 文件,因为它和 VGA 的 320200256 显示相匹配。FLIC 文件采取的压缩技术原理就是仅保存前一帧中改变的部分。这样占的空间小,弹出速度快。FLIC 文件的结果可分为 3 个层次:文件层、帧层和块层。文件层给出了 FLIC 文件的基本特征。帧层定义了帧的缓冲和块中块的数目。块层包括块的大小、类型和实际数据。这样的层次结构很容易实现,特别是可以增加块的类型以满足新的需要,同时无需涉及原定义。二、各层头的结构1.FLI 文件格式的结构定义文件头的结构定义文件头长度为 80H 字节,其 C 语言结构定义如下/* fl

3、i file hedaer struct */ typedef struct unsigned long fli-size;/* 00H:文件总长度 */unsigned int magic; /* 04H:文件格式,FLC=AF12;2FLI=AF11; */unsigned int frames-number; /* 06H:FLIC 的帧数 */unsigned int screen-width; /* 08H:屏幕宽度 */unsigned int screen-height; /* 0AH:屏幕高度 */ unsigned int unuserd; /* 0CH:保留未用 */uns

4、igned int flags; /* 0EH:标志=0003 */unsigned int speed; /* 10H:帧间播放速度单位 */unsigned long next; /* 12H:置为 0 */unsigned long frit; /* 16H:置为 0 */unsigned char fli-expand102; /* 1AH:保留作扩展用=0 */ FLIHEAD;帧头的结构定义帧头长度为 10H 字节,其 C 语言结构定义如下:/* frames header struct */ typedef struct unsigned long size-frame; /*

5、00H:帧大小,包括本帧头 */unsigned int magic; /* 04H:帧标识字=0F1FAH */unsigned int chunks; /* 06H:本帧块数 */unsigned char expand8; /* 08H:保留未用=0 */ FRAMESHEAD;块头的结构定义块头长度为 6H 字节,其 C 语言结构定义如下:/* chunk header struct */ typedef struct unsigned long size-chunk; /* 00H:块大小 */unsigned type-chunk; /* 04H:块类型 */ CHUNKHEAD;

6、2.FLC 文件格式的结构定义3文件头长度为 80H 字节,其 C 语言结构定义如下:/* fli file header struct */ typedef struct unsigned long fli-size; /* 00H:文件总长度 */unsigned int magic; /* 04H:文件格式,FLC=AF12; FLI=AF11; */unsigned int frames-number; /* 06H:FLIC 的帧数 */unsigned int screen-width; /* 08H:屏幕宽度 */unsigned int screen-height; /* 0A

7、H:屏幕高度 */unsigned int depth; /* 0CH:图像深度 */unsigned int flags; /* 0EH:标志=0003 */unsigned int speed; /* 10H:帧间播放速度单位FLC=1ms, FLI=1/70s */ unsigned int reserved-1; /* 14H:保留未用 */ unsigned long createtime; unsigned long creator; unsigned long updatetime; unsigned long updater;unsigned int aspectx; /* 创

8、建文件时的显示屏幕像素大小的纵横比,VGA320200unsigned int aspecty; 为 65 */ unsigned char reserved-20x26; /* 保留未用,=0 */unsigned long offsetframel; /* 50H:第一帧画面相对于文件开始的偏移 */unsigned long offsetframe2; /* 54H:第二帧画面相对于文件开始的偏移 */ unsigned char reserved-30x28; /* 保留未用=0 */ FLIHEAD;FLC 的帧头和块头的结构定义和 FLI 文件格式的定义相同。每块的数据紧接在 FL

9、IC 文件头的后面。对于不同的块类型有不同的数据含义,下面就不同的块类型分别介绍,这是设计播放 FLIC 动画文件程序的关键之所在。三、块类型的含义4FLIC 格式文件中的块类型有许多种,每一种类型都有不同的定义,因此我们必须对每一种类型作出准确的分析。由于动画格式 FLIC 图像文件的块类型具有极强的可扩展性,在此我们只介绍几种常见的块类型。1.类型 04H为每基色 256 级灰度的彩色调色板信息表 FLIC-COLOR,其第一个字为需调色的调色子块数(一个字),紧接其后的是需调色的相应各块的数据定义:字节 含义第一字节:跳色数,在本块中的需要跳过的颜色数(字节)。第二字节:调色数,本块中有

10、多少种颜色需要改变,当调色数为 0 时指调 256 色。初始时当前色号为零。其后的字节:以三字节为一组,是需要改调色的相应的 RGB 值。通常 FLIC 图像文件的头一帧的第一块数据便是该类型(或 0BH 类块)。在程序设计中我们定义了一个 256 色的调色板数组:char palette768;用于完成调色板的初始化工作。2.类型 07H该类型数据以字节为基础,只适用于.FLC 文件,处理对第一帧图像的改变情况较为适用。它含有本帧图像对于上与帧图像的改变部分。这种块类型是一种最常用的、最复杂的块类型,一般除了第一帧外后面的各帧通常采用这种块类型进行行数据压缩存储。它的描述如下:字节含义(1)

11、第一个字:需要改变的行的数量(2)第二个字开始:是具体需要改变的数据本身。每一行是进行单独的压缩的,这种5技术的采用大大压缩了.FLC 文件长度。它的具体定义为:可选字、小块数及小块的值。可选字:当高位=11 时,低位部分为跳行数。该字可以有多个,其跳行数相加。当高位=10 时,低位部分内容为当前行的最后一个字节。(作为本行的结束标志)。小块数:当高位=00 时,此字表示小块数的值。小块:第一个字节:跳列数。第二个字节:小块类型:当该值为正时:表示要从块中搬到图像中的像素(字)个数 N,其后就是 N 个连续的像素数据;当该值为负时:它的绝对值 N 表示要重复从块中搬到图像中的像素(字)的次数,

12、其后就是那个像素的数据。第三个字节:块中的图像数据(字)。3.类型 0BH与类型 04H 类似,它与 VGA 的 13H 模式相匹配。4.类型 0CH与类型 07H 类似,但它以字节为基础,通常用于.FLI 文件字节含义(1)第一个字:从屏幕上方开始和上一帧相同的行数即本帧中第一行要改变的行号。例如:如果有一个改变(运动)仅仅只是在屏幕的底部,那么此时该字值为199(VGA320200)。(2)第二个字:需要改变的行的数量。(3)第三个字以后:是具体需要改变的数据本身。每一行是进行单独的压缩的,这种技术的采用大大压缩了.FIC 文件长度。它的具体定义为:小块数及块的值。小块数:此字表示小块的个

13、数值,它是本行中含有小块的个数。当小块数=0 时,说明本行和上一行相同,不用进行重新处理。小块:第一个字节:跳列数。第二个字节:小块类型:当该值为正时:表示要从块6中搬到图像中的像素(字节)个数 N,其后就是 N 个连续的像素数据;当该值为负时:它的绝对值 N 表示要重复从块中搬到图像中的像素(字节)的次数,其后就是那个像素的数据。第三个字节:块中的图像数据。5.类型 0DH该类型没有数据,该帧的所有像素值都为 0。在实际应用中通常它只产生在当用户使用 3DS 创建一个新的 FLIC 文件中的第一帧。6.类型 0FH该类型用于压缩图像,通常只用于第一帧。它采用了 Run-Length 压缩方法

14、。该方法与类型 07H 及 0CH 中的行数据压缩方法是相似的。只是在该方法中正负号的定义与类型 07H 和 0CH 恰好相反。字节含义(1)第一字节 本行中小块数。(2)第二字节 小块的具体内容。第一字节:小块类型:当该值为负时:它的绝对值表示要搬到图像中的像素(字节)个数,其后就是数据;当该值为正时,表示要将下一个像素复制到图像中的次数,该像素(字节)紧随其后。第二个字节:块中的图像数据。7.类型 10H这种类型不进行压缩,块中的数据个数一定为图像的长宽相乘。这种类型在实际应用中一般不用。下面具体讨论播放程序的 C 语言程序设计方法,本文中的程序是针对.FLI 格式的动画文件而进行的程序设

15、计。读者如果要播放.FIC 格式的动画文件,只需根据.FIC7文件格式的具体定义,并参照下面的程序设计方法即可设计出相应的程序。 四、程序设计1.第一帧图像的播放程序void First-Frame (Video-Mem, fli-fp) char *Video-Mem; FILE *fli-fp; int Line-PacketNumber int Size-Count=0 int Screen-Char; long Sereen-Count=0L; memset(Video-Mem, 0,60000); do Line-PacketNumber=fgetc(fli-fp); while(L

16、ine-PacketNumber-) Size-Count=fgetc(fli-fp); if ( (Size-COUNT 0X80)=0X80 Size-Count=(256-Size-Count); while(Size-Count-) Screen-Count+; Sereen-Char=fgete(fli-fp); *Video-Mem+=Screen-Char; else Sereen-Char=fgete(fli-fp); while(Size-Count- Screen-Count+; *Video-Mem+=Sereen-Char; while(Screen-Count64000); 2.FLI 后续各帧图像的播放程序8void Other-Frame(Video-Mem,Fli-fp,Update-LineNumber) char *Video-Mem; FILE *Fli-fp; int Update-LineNumb

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号