首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi 播放 3DS 動畫:將 FLC 幀序列存入資料庫配合 Timer 實現逐幀播放

     編輯:Delphi

早期多媒體應用常將 3D Studio (3DS) 輸出的 FLC/FLI 動畫拆解為 BMP 幀序列,存入資料庫再由 TTimer 驅動逐幀顯示。本文示範此經典作法:3DS 導出 BMP → 建立 Paradox 資料表存放圖形 → TTable + TDBImage 綁定 → TTimer 控制播放速度。

步驟 1:3DS 導出 BMP 幀序列

  1. 進入 3DS KeyFramer 模組。
  2. Output 選項選擇 .BMP 格式。
  3. 所有幀存入同一目錄 (如 C:\PIC),檔名依序 F0001.BMP ~ F0045.BMP。

步驟 2:建立資料表

使用 Database Desktop 建立 Pic.db (Paradox 5.0):

欄位名型別大小說明
FileNameAlpha255BMP 檔案完整路徑
PictureGraphic-儲存 TGraphic 二進位資料

步驟 3:表單設計與元件綁定

  • Table1:DatabaseName=MyWork, TableName=Pic.db, Active=True
  • DataSource1:DataSet=Table1
  • DBImage1:DataSource=DataSource1, DataField=Picture, Stretch=True

步驟 4:FormCreate 將 BMP 匯入資料庫


procedure TForm1.FormCreate(Sender: TObject);
begin
  Table1.Open;
  with Table1 do
  begin
    while not EOF do
    begin
      // 從檔案載入到暫存 TImage
      Image1.Picture.LoadFromFile(FieldByName('FileName').AsString);
      // 寫入 Graphic 欄位
      Edit;
      FieldByName('Picture').Assign(Image1.Picture.Graphic);
      Post;
      Next;
    end;
  end;
end;

注意:此步驟僅需執行一次,完成後可刪除原始 BMP 檔,僅保留資料庫。

步驟 5:Timer 驅動播放

  • Timer1:Interval=250 (約 4 FPS), Enabled=False (預設不自動播放)

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Table1.Next;
  if Table1.EOF then Table1.First; // 循環播放
end;

啟動播放:Timer1.Enabled := True;暫停:Timer1.Enabled := False。

進階改良建議

  1. 記憶體快取:啟動時將所有 Graphic 讀入 TList 或陣列,播放時直接指派 DBImage1.Picture.Graphic,避免重複資料庫存取。
  2. 變速播放:提供 TrackBar 動態調整 Timer1.Interval。
  3. 音訊同步:配合 TMediaPlayer 播放伴隨音效 (WAV/MIDI)。
  4. 現代替代方案:改用 TClientDataSet + TMemoryStream 儲存壓縮後的幀資料 (JPG/PNG),或直接播放 AVI/MP4 (DirectShow/FFmpeg)。

小結

「資料庫存圖 + Timer 推進記錄指標」是 Delphi 早期多媒體教學的經典範例。雖然現在較少直接用資料庫存放動畫幀,但此架構展示了 TDataSet 導航 (Next/First/EOF) 控制狀態機的核心思想,對理解資料感知控制項、主從關聯、即時資料顯示仍有參考價值。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved