99精品久久这里只有精品,三上悠亚免费一区二区在线,91精品福利一区二区,爱a久久片,无国产精品白浆免费视,中文字幕欧美一区,爽妇网国产精品,国产一级做a爱免费观看,午夜一级在线,国产精品偷伦视频免费手机播放

    <del id="eyo20"><dfn id="eyo20"></dfn></del>
  • <small id="eyo20"><abbr id="eyo20"></abbr></small>
      <strike id="eyo20"><samp id="eyo20"></samp></strike>
    • 首頁 > 文章中心 > 正文

      FLIC動(dòng)畫文件播放程序設(shè)計(jì)

      前言:本站為你精心整理了FLIC動(dòng)畫文件播放程序設(shè)計(jì)范文,希望能為你的創(chuàng)作提供參考價(jià)值,我們的客服老師可以幫助你提供個(gè)性化的參考范文,歡迎咨詢。

      FLIC動(dòng)畫文件播放程序設(shè)計(jì)

      Autodesk公司的三維動(dòng)畫設(shè)計(jì)軟件3DS在我國已廣泛使用,其良好的性能為計(jì)算機(jī)專家和藝術(shù)家所肯定。其動(dòng)畫存儲(chǔ)文件flic也給系統(tǒng)提供了存儲(chǔ)和顯示的方便。下面具體分析FLIC文件的格式及播放程序的設(shè)計(jì)。

      一、FLIC文件格式的概述

      FLIC文件事實(shí)上是對(duì)一個(gè)靜止畫面序列的描述,連續(xù)顯示這一序列便可在上產(chǎn)生動(dòng)畫效果。FLIC文件結(jié)構(gòu)簡潔,彈出速度快,雖然每種基色最多只有256級(jí)灰度,圖像深度只有8位,但使用起來很方便。

      FLIC文件有兩種類型:FLI文件和FLC文件。FLC文是FLI文件的進(jìn)一步發(fā)展,它采用更高效的壓縮技術(shù),且其分辨率也不僅限于320×200。我們?cè)赑C上經(jīng)常使用的FLI文件,因?yàn)樗蚔GA的320×200×256顯示相匹配。

      FLIC文件采取的壓縮技術(shù)原理就是僅保存前一幀中改變的部分。這樣占的空間小,彈出速度快。FLIC文件的結(jié)果可分為3個(gè)層次:文件層、幀層和塊層。文件層給出了FLIC文件的基本特征。幀層定義了幀的緩沖和塊中塊的數(shù)目。塊層包括塊的大小、類型和實(shí)際數(shù)據(jù)。這樣的層次結(jié)構(gòu)很容易實(shí)現(xiàn),特別是可以增加塊的類型以滿足新的需要,同時(shí)無需涉及原定義。

      二、各層頭的結(jié)構(gòu)

      1.FLI文件格式的結(jié)構(gòu)定義

      ①文件頭的結(jié)構(gòu)定義

      文件頭長度為80H字節(jié),其C語言結(jié)構(gòu)定義如下

      /*flifilehedaerstruct*/

      typedefstruct{

      unsignedlongfli-size;/*00H:文件總長度*/

      unsignedintmagic;/*04H:文件格式,FLC=AF12;

      FLI=AF11;*/

      unsignedintframes-number;/*06H:FLIC的幀數(shù)*/

      unsignedintscreen-width;/*08H:屏幕寬度*/

      unsignedintscreen-height;/*0AH:屏幕高度*/

      unsignedintunuserd;/*0CH:保留未用*/

      unsignedintflags;/*0EH:標(biāo)志=0003*/

      unsignedintspeed;/*10H:幀間播放速度單位*/

      unsignedlongnext;/*12H:置為0*/

      unsignedlongfrit;/*16H:置為0*/

      unsignedcharfli-expand[102];/*1AH:保留作擴(kuò)展用=0*/

      }FLIHEAD;

      ②幀頭的結(jié)構(gòu)定義

      幀頭長度為10H字節(jié),其C語言結(jié)構(gòu)定義如下:

      /*framesheaderstruct*/

      typedefstruct{

      unsignedlongsize-frame;/*00H:幀大小,包括本幀頭*/

      unsignedintmagic;/*04H:幀標(biāo)識(shí)字=0F1FAH*/

      unsignedintchunks;/*06H:本幀塊數(shù)*/

      unsignedcharexpand[8];/*08H:保留未用=0*/

      }FRAMESHEAD;

      ③塊頭的結(jié)構(gòu)定義

      塊頭長度為6H字節(jié),其C語言結(jié)構(gòu)定義如下:

      /*chunkheaderstruct*/

      typedefstruct{

      unsignedlongsize-chunk;/*00H:塊大小*/

      unsignedtype-chunk;/*04H:塊類型*/

      }CHUNKHEAD;

      2.FLC文件格式的結(jié)構(gòu)定義

      文件頭長度為80H字節(jié),其C語言結(jié)構(gòu)定義如下:

      /*flifileheaderstruct*/

      typedefstruct{

      unsignedlongfli-size;/*00H:文件總長度*/

      unsignedintmagic;/*04H:文件格式,FLC=AF12;

      FLI=AF11;*/

      unsignedintframes-number;/*06H:FLIC的幀數(shù)*/

      unsignedintscreen-width;/*08H:屏幕寬度*/

      unsignedintscreen-height;/*0AH:屏幕高度*/

      unsignedintdepth;/*0CH:圖像深度*/

      unsignedintflags;/*0EH:標(biāo)志=0003*/

      unsignedintspeed;/*10H:幀間播放速度單位

      FLC=1ms,FLI=1/70s*/

      unsignedintreserved-1;/*14H:保留未用*/

      unsignedlongcreatetime;

      unsignedlongcreator;

      unsignedlongupdatetime;

      unsignedlongupdater;

      unsignedintaspectx;/*創(chuàng)建文件時(shí)的顯示屏幕像素大小的縱橫比,VGA320×200

      unsignedintaspecty;為6∶5*/

      unsignedcharreserved-2[0x26];/*保留未用,=0*/

      unsignedlongoffsetframel;/*50H:第一幀畫面相對(duì)于文件

      開始的偏移*/

      unsignedlongoffsetframe2;/*54H:第二幀畫面相對(duì)于文件

      開始的偏移*/

      unsignedcharreserved-3[0x28];/*保留未用=0*/

      }FLIHEAD;

      FLC的幀頭和塊頭的結(jié)構(gòu)定義和FLI文件格式的定義相同。

      每塊的數(shù)據(jù)緊接在FLIC文件頭的后面。對(duì)于不同的塊類型有不同的數(shù)據(jù)含義,下面就不同的塊類型分別介紹,這是設(shè)計(jì)播放FLIC動(dòng)畫文件程序的關(guān)鍵之所在。

      三、塊類型的含義

      FLIC格式文件中的塊類型有許多種,每一種類型都有不同的定義,因此我們必須對(duì)每一種類型作出準(zhǔn)確的分析。由于動(dòng)畫格式FLIC圖像文件的塊類型具有極強(qiáng)的可擴(kuò)展性,在此我們只介紹幾種常見的塊類型。

      1.類型04H

      為每基色256級(jí)灰度的彩色調(diào)色板信息表FLIC-COLOR,其第一個(gè)字為需調(diào)色的調(diào)色子塊數(shù)(一個(gè)字),緊接其后的是需調(diào)色的相應(yīng)各塊的數(shù)據(jù)定義:

      字節(jié)含義

      第一字節(jié):跳色數(shù),在本塊中的需要跳過的顏色數(shù)(字節(jié))。

      第二字節(jié):調(diào)色數(shù),本塊中有多少種顏色需要改變,當(dāng)調(diào)色數(shù)為0時(shí)指調(diào)256色。初始時(shí)當(dāng)前色號(hào)為零。

      其后的字節(jié):以三字節(jié)為一組,是需要改調(diào)色的相應(yīng)的RGB值。

      通常FLIC圖像文件的頭一幀的第一塊數(shù)據(jù)便是該類型(或0BH類塊)。在程序設(shè)計(jì)中我們定義了一個(gè)256色的調(diào)色板數(shù)組:

      charpalette[768];

      用于完成調(diào)色板的初始化工作。

      2.類型07H

      該類型數(shù)據(jù)以字節(jié)為基礎(chǔ),只適用于.FLC文件,處理對(duì)第一幀圖像的改變情況較為適用。它含有本幀圖像對(duì)于上與幀圖像的改變部分。

      這種塊類型是一種最常用的、最復(fù)雜的塊類型,一般除了第一幀外后面的各幀通常采用這種塊類型進(jìn)行行數(shù)據(jù)壓縮存儲(chǔ)。它的描述如下:

      字節(jié)含義

      (1)第一個(gè)字:需要改變的行的數(shù)量

      (2)第二個(gè)字開始:是具體需要改變的數(shù)據(jù)本身。每一行是進(jìn)行單獨(dú)的壓縮的,這種技術(shù)的采用大大壓縮了.FLC文件長度。它的具體定義為:可選字、小塊數(shù)及小塊的值。①可選字:

      當(dāng)高位=11時(shí),低位部分為跳行數(shù)。該字可以有多個(gè),其跳行數(shù)相加。當(dāng)高位=10時(shí),低位部分內(nèi)容為當(dāng)前行的最后一個(gè)字節(jié)。(作為本行的結(jié)束標(biāo)志)。②小塊數(shù):當(dāng)高位=00時(shí),此字表示小塊數(shù)的值。③小塊:第一個(gè)字節(jié):跳列數(shù)。第二個(gè)字節(jié):小塊類型:當(dāng)該值為正時(shí):表示要從塊中搬到圖像中的像素(字)個(gè)數(shù)N,其后就是N個(gè)連續(xù)的像素?cái)?shù)據(jù);當(dāng)該值為負(fù)時(shí):它的絕對(duì)值N表示要重復(fù)從塊中搬到圖像中的像素(字)的次數(shù),其后就是那個(gè)像素的數(shù)據(jù)

      。第三個(gè)字節(jié):塊中的圖像數(shù)據(jù)(字)。

      3.類型0BH

      與類型04H類似,它與VGA的13H模式相匹配。

      4.類型0CH

      與類型07H類似,但它以字節(jié)為基礎(chǔ),通常用于.FLI文件

      字節(jié)含義

      (1)第一個(gè)字:從屏幕上方開始和上一幀相同的行數(shù)即本幀中第一行要改變的行號(hào)。例如:如果有一個(gè)改變(運(yùn)動(dòng))僅僅只是在屏幕的底部,那么此時(shí)該字值為199(VGA320×200)。

      (2)第二個(gè)字:需要改變的行的數(shù)量。

      (3)第三個(gè)字以后:是具體需要改變的數(shù)據(jù)本身。每一行是進(jìn)行單獨(dú)的壓縮的,這種技術(shù)的采用大大壓縮了.FIC文件長度。它的具體定義為:小塊數(shù)及塊的值。

      ①小塊數(shù):此字表示小塊的個(gè)數(shù)值,它是本行中含有小塊的個(gè)數(shù)。當(dāng)小塊數(shù)=0時(shí),說明本行和上一行相同,不用進(jìn)行重新處理。

      ②小塊:第一個(gè)字節(jié):跳列數(shù)。第二個(gè)字節(jié):小塊類型:當(dāng)該值為正時(shí):表示要從塊中搬到圖像中的像素(字節(jié))個(gè)數(shù)N,其后就是N個(gè)連續(xù)的像素?cái)?shù)據(jù);當(dāng)該值為負(fù)時(shí):它的絕對(duì)值N表示要重復(fù)從塊中搬到圖像中的像素(字節(jié))的次數(shù),其后就是那個(gè)像素的數(shù)據(jù)。第三個(gè)字節(jié):

      塊中的圖像數(shù)據(jù)。

      5.類型0DH

      該類型沒有數(shù)據(jù),該幀的所有像素值都為0。在實(shí)際應(yīng)用中通常它只產(chǎn)生在當(dāng)用戶使用3DS創(chuàng)建一個(gè)新的FLIC文件中的第一幀。

      6.類型0FH

      該類型用于壓縮圖像,通常只用于第一幀。它采用了Run-Length壓縮方法。該方法與類型07H及0CH中的行數(shù)據(jù)壓縮方法是相似的。只是在該方法中正負(fù)號(hào)的定義與類型07H和0CH恰好相反。

      字節(jié)含義

      (1)第一字節(jié)本行中小塊數(shù)。

      (2)第二字節(jié)小塊的具體內(nèi)容。

      ①第一字節(jié):小塊類型:當(dāng)該值為負(fù)時(shí):它的絕對(duì)值表示要搬到圖像中的像素(字節(jié))個(gè)數(shù),其后就是數(shù)據(jù);當(dāng)該值為正時(shí),表示要將下一個(gè)像素復(fù)制到圖像中的次數(shù),該像素(字節(jié))緊隨其后。

      ②第二個(gè)字節(jié):塊中的圖像數(shù)據(jù)。

      7.類型10H

      這種類型不進(jìn)行壓縮,塊中的數(shù)據(jù)個(gè)數(shù)一定為圖像的長寬相乘。這種類型在實(shí)際應(yīng)用中一般不用。

      下面具體討論播放程序的C語言程序設(shè)計(jì)方法,本文中的程序是針對(duì).FLI格式的動(dòng)畫文件而進(jìn)行的程序設(shè)計(jì)。讀者如果要播放.FIC格式的動(dòng)畫文件,只需根據(jù).FIC文件格式的具體定義,并參照下面的程序設(shè)計(jì)方法即可設(shè)計(jì)出相應(yīng)的程序。

      四、程序設(shè)計(jì)

      1.第一幀圖像的播放程序

      voidFirst-Frame(Video-Mem,fli-fp)

      char*Video-Mem;

      FILE*fli-fp;

      {

      intLine-PacketNumber

      intSize-Count=0

      intScreen-Char;

      longSereen-Count=0L;

      memset(Video-Mem,0,60000);

      do{

      Line-PacketNumber=fgetc(fli-fp);

      while(Line-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-Count<64000);

      }

      2.FLI后續(xù)各幀圖像的播放程序

      voidOther-Frame(Video-Mem,Fli-fp,Update-LineNumber)

      char*Video-Mem;

      FILE*Fli-fp;

      intUpdate-LineNumber;

      {

      intSize-Count=0,Skip-Col=0;

      intUpdate-LineCount=0;

      intScreen-Char;

      intNumber-Packet;

      char*Video-p;

      while(Update-LineCount<Update-LineNumber)

      {

      Video-p=Video-Mem;

      Number-Packet=fgetc(Fli-fp)

      Update-LineCount++;

      while(Number-Packet--)

      {

      Skip-Col=fgete(Fli-fp);

      Video-Mem=Video-Mem+Skip-Col;

      Size-Count=fgetc(Fli-fp);

      if((Size-Count&0x80)==0x80)

      {

      Size-Count=256-Size-Count;

      Screen-Char=fgetc(Fli-fp);

      while(Size-Count--)*Video-Mem++=Sereen-Char;

      }

      else

      {

      while(Size-Count--){

      Screen-Char=fgetc(Fli-fp);

      *Video-Mem++=Screen-Char;

      }

      }

      }

      Video-Mem=Video-p+320;

      }

      }

      3.播放程序的調(diào)用及其它幾個(gè)子程序

      voidTransmit-Fli(Fli-fp)

      FILE*Fli-fp;

      {

      intNUmber-Chunk;

      if(fread((unsignedchar*)&header,1,sizeof(FLIHEAD),Fli-fp)

      ==sizeof(FLIHEAD))

      if(header,magie|=0xAF11)

      {

      printf("NotanFLIfile/n");

      exit(0);

      }

      if(fread((unsignedchar*)*frame-head,1,

      sizeof(FRAMESHEAD),Fli-fp)==sizeof(FRAMESHEAD));

      if(frame-head,magic=0xF1FA)

      {

      printf("ReadinganErroeFLIfile\n");

      exit(0);

      }

      if(fread((unsignedchar*)&chunk-head,1,

      sizeof(CHUNKHEAD),Fli-fp)==sizeof(CHUNKHEAD));

      if(fread(&NUmber-Chunk,1,sizeof(int),Fli-fp)==sizeof(int));

      else{

      printf("ErrorreadingFli\n");

      exit(0);

      }

      fgetc(Fli-fp);fgetc(Fli-fp);

      if(fread(&palette,1,sizeof(palette),Fli-fp)==768);

      else{

      printf("ErrorreadingFli\n");

      exit(0);

      }

      if(fread((unsignedchar*)&chunk-head,1,

      sizeof(CHUNKHEAD),Fli-fp)==sizeof(CHUNKHEAD));

      else{

      printf("ErrorreadingFli\n");

      exit(0);

      }

      ShowFli-Frame(Fli-fp);

      fclose(Fli-fp);

      }

      voidShowFli-Frame(Fli-fp)

      FILE*Fli-fp;

      {

      longFrame-DataAddress;

      intFirst-UpdateLine,End-UpdateLine;

      intFrame-Number=2,Adjust-Char=0;

      init();

      setvgapalette(palette);

      First-Frame(MK-FP(0x0a000,0x0),Fli-fp);

      Frame-DataAddress=ftell(Fli-fp);

      while(Frame-Number<=header,frames-number-1)

      {

      Frame-DataAddress=ftell(Fli-fp);

      Adjust-Char=fgetc(Fli-fp);

      if(Adjust-Char|=0)fseek(Fli-fp,-1L,SEEK-CUR);

      if(fread((unsignedchar*)&frame-head,1,

      sizeof(FRAMESHEAD),Fli-fp)==sizeof(FRAMESHEAD));

      if(frame-head,magic|=0xFIFA)exit(0);

      if(frame-head,chunks|=0)

      {

      if(fread((unsignedchar*)&chunk-head,1,

      sizeof(CHUNKHEAD),Fli-fp)==sizeof(CHUNKHEAD));

      if(fread(&First-UpdateLine,1,sizeof(int),Fli-fp)

      ==sizeof(int));

      else{

      printf("ErrorreadingFli/n");

      exit(0);

      }

      if(fread(&End-UpdateLine,1,sizeof(int),Fli-fp)

      ==sizeof(int));

      else{

      prinft("ErrorreadingFli/n");

      exit(0);

      }

      Other-Frame(MK-FP(0x0a000,First-UpdateLine*320),Fli-fp,

      End-UpdateLine);

      }

      Frame-Number++;

      }

      }

      voidvideo-init()

      {

      unionREGSr;

      r.x.ax=0x0013;

      int86(0x10,&r,&r);

      }

      voidvideo-text()

      {

      unionREGSr;

      r.x.ax=0x0003;

      int86(0x10,&r,&r);

      }

      setvgapalette(p)

      char*p;

      {

      unionREGSr;

      structSREGSsr;

      inti;

      for(i=0;i<768;++i)*(p+i)=*(p+i)>>1;

      r.x.ax=0x1012;

      r.x.bx=0;

      r.x.cx=256;

      r.x.dx=FP-OFF(p);

      sr.es=FP-SEG(p);

      int86x(0x10,&r,&r,&sr);

      }

      本文主要論述了三維動(dòng)畫設(shè)計(jì)軟件3DS中的動(dòng)畫存儲(chǔ)文件FLIC的存儲(chǔ)方式及針對(duì)FLI格式文件的播放程序的C語言設(shè)計(jì)方法。對(duì)于工作在高分辨率方式下的動(dòng)畫文件的播放程序的C程序設(shè)計(jì),我們也可以通過同樣的方法進(jìn)行設(shè)計(jì)??傊疚闹皇翘峁┙o讀者一種最基本的設(shè)計(jì)方法,為以后的進(jìn)一步擴(kuò)充提供了可能。

      文檔上傳者
      亚洲AV无码精品色欲av| 久久精品国产99国产精偷| 亚洲人成人网站在线观看| 伊人网视频在线观看| 日产乱码一区二区国产内射| 中文字幕在线乱码亚洲| 日本最新免费二区三区| 抽搐一进一出试看60秒体验区| 老熟女一区二区免费| 少妇被猛烈进入中文字幕| 在线观看免费无码专区| 人成午夜免费大片| 亚洲AV无码AV色| 亚洲第一区二区精品三区在线| 日韩精品真人荷官无码| 久久成人麻豆午夜电影| 国产人妖一区二区在线| 人妻熟女翘屁股中文字幕| 日本老熟妇乱| 国内精品伊人久久久久av| 精品女同一区二区三区亚洲| 五月色丁香婷婷网蜜臀av| 真实国产老熟女粗口对白| 一区二区三区婷婷在线| 日韩精品免费视频久久| 18禁黄网站禁片免费观看女女| 老熟女多次高潮露脸视频| 按摩师玩弄少妇到高潮hd| 丰满精品人妻一区二区| 日韩av精品国产av精品| 日韩熟妇精品视频一区二区| 白白色视频这里只有精品| 久久久久久九九99精品| 中文字幕第七页| 91成人自拍视频网站| 亚洲人成人无码www| 亚洲中文无码永久免| 一区二区三区婷婷中文字幕| 女同视频一区二区在线观看 | 一本无码人妻在中文字幕免费| 久久亚洲午夜牛牛影视|