2012-04-03 6 views
0

私には大きな.SWFファイルがあります。私はアニメーションのデュレーションをプログラム的に、好ましくは.NETで取得する必要があります。SWFからのFlashアニメーションの時間を計算しますか?

ByteScoutは、すべてシングルフレームアニメーションであると言いました。実行時間を確認する唯一の方法は、再生を監視することです。

もっと良い解決策はありますか?

答えて

0

"シングルフレーム"は、メインタイムラインのステージに配置された一部の子オブジェクトでアニメーションが発生していることを意味します。あなたは子ども(または他の子孫)のtotalFramesを見つけるために深く掘り下げなければなりません。クラスが公開されている場合は、ステージ上のすべてのオブジェクトのフレーム長をロードして表示するためにFlashファイルを設定することでこれを行うことができます。 .NET == ??。

+0

ステージ上のオブジェクトに到達するために(コードから)Flashファイルをロードするにはどうすればよいですか? .NET用のFlash編集ライブラリはありますか? (その他何か?) – Jesse

+0

申し訳ありませんが、Flashで.NETで作業していません。私がこれに取り組んでいたのであれば、SWFをロードして精査するために、ActionScriptやFlexを使って別のSWFプログラムをビルドします。さらに詳しいヘルプが必要な場合は、私の迷惑メールで私に連絡してください:[email protected] – iND

0

私は自分自身でFlashHeaderReaderクラスを使用しています。残念ながら、圧縮ファイルはサポートしていません(CWS-Adobe spetificationで始まります)。

クラスを少し変更しました。圧縮されたswfでも動作します。このクラスにはICSharpCode.SharpZipLib.dllが必要です。 hereまたはICSharpCodeからダウンロードできます。

私は、コンストラクタだけ

public FlashHeaderReader(String filename) 
    { 
     Height = 0; 
     Width = 0; 
     FrameCount = 0; 
     FrameRate = 0; 
     _currentIndex = 0; 
     Error = false; 
     FileStream fs = File.OpenRead(filename); 
     _data = new byte[fs.Length]; 
     fs.Read(_data, 0, _data.Length); 
     fs.Close(); 

     if (System.Text.Encoding.ASCII.GetString(_data, 0, 3).Equals("CWS")) 
     { 
      _mIsCompressed = true; 
     } 

     if (_mIsCompressed) 
     { 
      var list = new List<byte>(_data); 
      var header = list.GetRange(1, 7).ToArray(); 
      list.RemoveRange(0, 8); 
      _data = list.ToArray(); 
      using (var str = new MemoryStream(_data)) 
      using (var dStr = new InflaterInputStream(str)) 
      { 

       var buffer = new byte[4096]; 
       list = new List<byte> {(byte) 'F'}; 
       list.AddRange(header); 
       int count; 
       while ((count = dStr.Read(buffer, 0, 4096)) > 0) 
       { 
        list.AddRange(buffer.Take(count)); 
       } 
       _data = list.ToArray(); 
      } 
     } 




     ParseHeader(); 
    } 

を変更したが、それはあなたをお手伝いします願っています。

関連する問題