FLI / FLC (flic) animáció lejátszása delphiben

FLI / FLC (flic) animáció lejátszása delphiben
2008-08-24T02:42:15+02:00
2008-08-24T11:14:27+02:00
2022-11-10T18:20:36+01:00
SpamMePlz
Hello!
Szeretnék egy delphiben írt programban FLIC animációkat lejátszani (tehát olyan animációkat, amik *.FLC / *.FLI kiterjesztésűek), viszont sehol sem találtam sem egy komponenst, sem egy DLL-t, semmit. tudna esetleg valaki segíteni, hogyan is tudnék lejátszani ilyen fájlokat?

Előre is köszönöm
Mutasd a teljes hozzászólást!


  • fli/flc fajlok formatuma "nyilt", ertsd megtalalhato a neten.
    Nem nagy kaland megirni a lejatszot.

    pl itt egy regi asm forrasom


    ; ; ; FLI player created by, Jan Chika ; ; ; with dokumtácio .386 mof macro p1,p2 ; offset hellyet mov p1,offset p2 endm break_point macro ; torés pont int 3 endm bogar segment para public 'CODE' use16 assume cs:bogar,ds:bogar code_seg dw seg bogar ; kód szegmens puffer_seg dw seg puffer ; munka szegmens psp_seg dw 0 ; kezdeti PSP szegmens start: mov cs:[psp_seg],ds ; psp elmentése mov ds,cs:[code_seg] ; ds=cs mov es,cs:[code_seg] ; es=cs call get_file_name ; file név be vétel call play_fli ; fli lejátszás exit: mov ax,3 int 10h ; sima szöveges mod beálit mov ax,4c00h int 21h ; kilép get_file_name: ; file név bemásolás ; a PSP-röl mov ds,cs:[psp_seg] mof di,file_name mov si,80h xor cx,cx mov cl,byte ptr [si] lodsw rep movsb xor al,al dec di stosb mov ds,cs:[code_seg] ret read_header: ; FLI fejléc beolvasás mof dx,file_name xor al,al mov ah,3dh int 21h ; file nyitás jc error_open ; sikerült ? mov word ptr [fszam],ax ; ha igen mof dx,fli_fejlec mov cx,128 call load ret error_open: ; és ha nem mov al,1 jmp exit play_fli: call read_header ; fejléc beolvasás call test_format ; formátum ellenörzés call test_size ; felbontás ellenörzés call set_video_mode ; video mod beálitás mov ax,[kockak] ; hány kép kocka van play_kocka: ; kockák lejátszó ciklus mov ah,1 int 16h jz no_key ; nyomtak e gombot? mov ax,0 int 16h jmp exit ; ha igen akkor ürit majd EXITál no_key: cmp kockak,0 ; Van e még lejátszandó kocka jnz van_meg_kocka re_play: xor cx,cx ; ha nincs mov dx,cx mov ax,4200h mov bx,[fszam] int 21h ; file olvasási mutató 0 ra állitás mof dx,fli_fejlec mov cx,128 call load ; fli fejléc beolvasása jmp play_kocka ; kockák ciklusára van_meg_kocka: mof dx,kocka_fejlec ; következö kocka fejléc beolvasás mov cx,16 call load dec [kockak] ; csökenti a kocka számlálot chunk_ciklus: ; ez a CHUNK ciklus cmp [sub_chunk],0 ; Van még chunk ebben a kockában jz play_kocka dec [sub_chunk] ; csökentem a Chunk számlálóját call play_chunk ; feldolgozom a Chunk-ot jmp chunk_ciklus play_chunk: mof dx,chunk_fejlec mov cx,6 call load ; chunk fejléc beolvasás mov ecx,dword ptr [chunk_meret] sub ecx,6 push ds mov dx,0 mov ds,cs:[puffer_seg] call load ; chunk adat beolvasás pop ds call sync ; sebeség /itt vár anyi füg szinkront hogy jo legyen a sebesség cmp [chunk_tipus],11 ; jz chunk_11 ; meg hivja az adot chunk kezelöjét cmp [chunk_tipus],12 ; jz chunk_12 ; cmp [chunk_tipus],13 ; jz chunk_13 ; cmp [chunk_tipus],15 ; jz chunk_15 ; cmp [chunk_tipus],16 ; jz chunk_16 ret chunk_11: ; FLI_COLOR chunk push ds mov ds,cs:[puffer_seg] xor di,di xor si,si lodsw : hanyadik paletta elem mov bx,ax test bx,bx jmp chunk_11_3 chunk_11_1: lodsb add di,ax lodsb ; hany elem mov cx,ax or cx,cx jnz chunk_11_2 mov cx,256 ; ha 0 akkor 256 azaz mind chunk_11_2: mov dx,3c8h ; palatta szám beálitás mov ax,di out dx,al inc di inc dx lodsb ; red out dx,al lodsb ; green out dx,al lodsb ; blue out dx,al loop chunk_11_2 dec bx chunk_11_3: jnz chunk_11_1 pop ds ret chunk_12: ; FLI_LC (Line Changed) push ds mov ds,cs:[puffer_seg] xor si,si xor di,di mov ax,0a000h mov es,ax lodsw ; hanyadik sor mov dx,320 mul dx add di,ax lodsw mov cs:[line],ax ; hany sor mov dx,di xor ah,ah chunk_12_1: mov di,dx lodsb ; mire mov bl,al test bl,bl jmp chunk_12_4 chunk_12_2: lodsb add di,ax lodsb test al,al js chunk_12_3 mov cx,ax rep movsb dec bl jnz chunk_12_2 jmp chunk_12_5 chunk_12_3: neg al mov cx,ax lodsb rep stosb dec bl chunk_12_4: jnz chunk_12_2 chunk_12_5: add dx,320 dec cs:[line] jnz chunk_12_1 pop ds ret chunk_13: mov ax,0a000h mov es,ax xor ax,ax mov cx,32000 rep stosw ret chunk_15: push ds mov cs:[line],200 mov ds,cs:[puffer_seg] xor si,si xor di,di mov ax,0a000h mov es,ax mov dx,di xor ah,ah chunk_15_1: mov di,dx lodsb mov bl,al test bl,bl jmp chunk_15_4 chunk_15_2: lodsb test al,al js chunk_15_3 mov cx,ax lodsb rep stosb dec bl jnz chunk_15_2 jmp chunk_15_5 chunk_15_3: neg al mov cx,ax rep movsb dec bl chunk_15_4: jnz chunk_15_2 chunk_15_5: add dx,320 dec cs:[line] jnz chunk_15_1 pop ds ret chunk_16: push ds mov ax,0a000h mov es,ax mov ds,cs:[puffer_seg] xor si,si xor di,di mov cx,32000 rep movsw pop ds ret sync: push dx push ax mov cx,word ptr cs:[fli_fejlec+16] cmp cx,0 jne sync2 mov cx,1 sync2: mov dx,3dah sync3: in al,dx and al,8 jz sync3 sync4: in al,dx and al,8 jnz sync4 loop sync2 pop ax pop dx ret load: pusha mov bx,cs:[fszam] mov ah,3fh int 21h popa ret open: mov ds,cs:[code_seg] mof dx,file_name xor al,al mov ah,3dh int 21h jc open_error mov cs:[fszam],ax ret open_error: mov al,3 jmp exit test_format: cmp word ptr [formatum],0af11h jz format_ok shr word ptr [fli_fejlec+16],4 cmp word ptr [formatum],0af12h jz format_ok jmp exit format_ok: ret test_size: cmp szeleseg,320 jnz size_error cmp magasag,200 jnz size_error ret size_error: jmp exit set_video_mode: mov ax,13h int 10h ret data_area label byte fli_fejlec label byte meret dd 1 dup (?) formatum dw 1 dup (?) kockak dw 1 dup (?) szeleseg dw 1 dup (?) magasag dw 1 dup (?) dw 120 dup (?) kocka_fejlec label byte kocka_meret dd 0 kocka_tipus dw 0 sub_chunk dw 0 db 10 dup (0) chunk_fejlec label byte chunk_meret dd 0 chunk_tipus dw 0 line dw 0 fszam dw 0 file_name db 100 dup (?) bogar ends puffer segment para public 'DATA' use16 puffer ends end start
    Mutasd a teljes hozzászólást!
  • Illetve ime az fli leiras



    Az FLI fájl elején van a FLI fájl fejléc: Amely: ┌────────────────── Pozició │ │ ┌───────────── Méret (byte) │ │ │ │ ┌───────── Név │ │ │ │ │ │ ┌ Leirás │ │ │ │ 0 4 size Fájl méret 4 2 magic Azonositó 0AF11h 6 2 frames Kép kockák száma. 8 2 width Képernyö széleség. 10 2 height Képernyö magaság. 12 2 Ezt nem tudom. Valami melyseg gondolom a BIG felbontáshoz. 14 2 flags Ez mindig nulla (akkor miért van????) 16 2 speed Fügöleges szinkron várás kockák közöt (sebeség). 18 4 next lásd 14. 22 4 frit lásd 14. 26 102 expand Ezt nem használja de fenvantartva a future verzioknak. Ez volt a FLI fejléc ez gondolom világos volt. Ezt követi közvetlen a kocka(frame) fejléc. (tehát a 128. byte tól) Ez sem tul bonyolult. Söt ez még egyszerübb. ┌────────────────── Pozició │ │ ┌───────────── Méret (byte) │ │ │ │ ┌───────── Név │ │ │ │ │ │ ┌ Leirás │ │ │ │ 0 4 size Ennek a kockának a mérete byte-ban (nem a képernyön hanem az azt leiró adatoké / tehát a következö frames cime meg hát azért kell, hogy ennyi -16 bájtot olvasunk be (azért -16 mert a fejléc már bentvan) Max 64K. 4 2 magic Mindig 0f1fah. 6 2 chunks Hány CHUNK-ot tartalmaz 8 8 expand Ez már megint future Mi a CHUNK? A CHUNK tulajdonképen egy esemény ami a képpel történhet de ezt majd alább. A kocka fejléc után jönnek a CHUNK adatok amik felépitik a képet. A CHUNK-nak is van fejléce. Ami: ┌────────────────── Pozició │ │ ┌───────────── Méret (byte) │ │ │ │ ┌───────── Név │ │ │ │ │ │ ┌ Leirás │ │ │ │ 0 4 size A CHUNK mérete 4 2 type A CHUNK tipusa A CHUNK mérete az a CHUNK mérete. A CHUNK tipusai a következök lehetnek: 11 FLI_COLOR Szinpaletta beálitás 12 FLI_LC Az elözö kockához képesti változások. 13 FLI_BLACK Ettöl tök fekete lessz az egész kép 15 FLI_BRUN Ez csak az elsö kép lehet (ez szinte GIF) 16 FLI_COPY Ez nem tömöritet teljes kép (egy az egybe másolja a memoriába én még nem látam használva) Bövebben: 11 FLI_COLOR Az elsö szó az hogy hány elemböl áll. Egy elem igy néz ki: elsö byte hanyadik szint állitod második byte hány szint állitasz ettöl a szintöl kezdve ugyan ezekra az értékekre. a következö 3 byte a palleta értékei red,green,blue 12 FLI_LC Az elsö szó hanyadik sortol változik A következö szó hány sor változik. A következö byte az elemek száma Az elemek felépitése: 1.byte Hányat ugorjunk (tehát kihagyunk azaz nem változik.) 2.byte Hány változik 3.byte Mire 13 FLI_BLACK Ez sima képernyö törlés 15 FLI_BRUN Mint már mondtam ez csak elsö kép lehet. Hasonlit a FLI_LC eseményre de nincs benne hogy hányat ugorjunk Felépitése 1. byte méret 2. byte adat Tehát it egy elem két byte azt mondja, hogy hány azonos pont jön egymás után. 16 FLI_COPY Itt tömörités nélkül van a teljes kép. Simán be kell másolni a video memoriába. AZ FLC nek vannak nagyob plusz CHUNK-jai (kell is mert ha megfigyelted igy max 256 szined lehet) A program irása a következö képen történhet. 1. FLI file nyitás. 2. FLI header (128 byte) olvasás. 3. Fejléc elenörzés (pl. formátum, méret, video mód). 3. Kocka fejléc beolvasása (16 byte). 4. Chunkok számának és kocka méretének megjegzése. 5. Chunkok belovasása és tipus szerinti lejátszás. 6. Ha beolvastuk az összes Chunkot akkor jöhet a következö kocka 7. Ha nincs több kocka akkor kezdjük ellöröl. A mellékel ASM igy csinálja. A CHUNK-ok lejátszását külön rutinok csinálják a 11 chunkot a CHUNK_11 a 12-est a CHUNK_12 ées igytovább játszák le.
    Mutasd a teljes hozzászólást!
  • Vagy használhatod a TFLXPlayer komponenst (bár Delphi 2 alá írták, nem biztos hogy működőképes ebben a formában )

    http://www.torry.net/vcl/mmedia/animation/flxplayb.zip
    Mutasd a teljes hozzászólást!
  • ~100 sor asseblyben.
    Delphiben mennyi volna?

    Tényleg kell egy programozó és egy komponens vadász kategória...
    Tovább tart keresni, kuncsorogni, letölteni, megismerni, másikat letölteni...., Mint írni egy rendeset.

    Mutasd a teljes hozzászólást!
  • Komponens vadász? Tudtommal bárki közzétehet létező megoldásokat... aztán majd ő eldönti melyik felel meg neki... Én pl nem szívesen kezdenék neki egy FLI/FLC kezelő írásának, ha előtte találtam egy komponenst/forrást ami ugyanazt teszi lehetővé amire szükségem van
    Mutasd a teljes hozzászólást!

  • mint irtam sokszor a feladat egyeni megoldasa egyszerubb mint kuncsorogni a neten.

    A kompones vadasz nem neked szolt... (bocs)
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd