Delphi - AVI állományok kezelése programból

AVI 1. rész

forráskód letöltése
Most induló sorozatunkban az AVI állományok programból történő feldolgozásával foglalkozunk. Megnézzük azt, hogy miként tudjuk egy AVI állományból kiolvasni annak jellemző tulajdonságait, mint például, hogy milyen hosszú a film, mekkora méretű a kép, stb. Megoldást keresünk arra is, hogy miként tudjuk az AVI-ban tárolt képeket (frame) egyesével lementeni akár egy BMP-be, így a film minden egyes kockája önálló képként is elérhetővé válik.
AVI állományok kezeléséhez az avifil32.dll-ben lévő interfészek, függvények fognak segíteni bennünket, mely már a Windows 95, illetve az NT 3.1 óta rendelkezésre állnak. Már csak arról kell gondoskodnunk, hogy Delphi-ből elérhessük ezeket. Ehhez hozzuk létre az Avi.pas-t, melyben adottak a szükséges deklarációk az interfészek és függvény eléréséhez.
Nézzük miként használhatjuk az avifil32.dll függvényeit arra, hogy meghatározzuk egy tetszőleges AVI tulajdonságait:
procedure TForm1.Button1Click(Sender: TObject);
var
  af: PAVIFile;
  afi: TAVIFileInfo;
begin
  if OpenDialog1.Execute then begin
    ListBox1.Items.Clear;
Az első teendőnk az inicializálás, melyet az AVIFileInit függvény végez, nekünk csak meg kell hívnunk. Ezt követően megnyithatjuk az adott AVI-t az AVIFileOpen függvénnyel. Ennél az első paraméterben egy mutatót kell átadnunk, melybe visszakapunk egy IAVIFile interfészre mutató pointert. A második paraméter lesz a megnyitandó AVI állomány, majd a harmadikban a megnyitás módját adhatjuk meg, melyek az alábbiak lehetnek:
  • OF_CREATE
  • OF_SHARE_DENY_NONE
  • OF_SHARE_DENY_READ
  • OF_SHARE_DENY_WRITE
  • OF_SHARE_EXCLUSIVE
  • OF_READ
  • OF_READWRITE
  • OF_WRITE
    AVIFileInit;
    if AVIFileOpen(af, PChar(OpenDialog1.FileName), OF_READ, nil)=AVIERR_OK then begin
A megnyitást követően a szükséges információkat az AVIFileInfo függvény kérdezi le. Ennek első paraméterként az imént kapott IAVIFile interfészt kell átadnunk, majd másodikként egy TAVIFileInfo struktúrát, melybe a lekérdezés eredményét kapjuk, végül e struktúra méretét kell átadni. A függvény lefutása után nincs más teendőnk, mint kiolvasni a struktúra számunkra érdekes adatait.
      if AVIFileInfo(af, afi, SizeOf(TAVIFileInfo))=0 then begin
        ListBox1.Items.Add('Frame Width: ' + IntToStr(afi.dwWidth));
        ...
       end;
     ...
  end;
end;

AVI cikksorozat

AVI állományok kezelése programból - AVI 1. rész

AVI exportálása BMP képekbe - AVI 2. rész