私には大きな.SWFファイルがあります。私はアニメーションのデュレーションをプログラム的に、好ましくは.NETで取得する必要があります。SWFからのFlashアニメーションの時間を計算しますか?
ByteScoutは、すべてシングルフレームアニメーションであると言いました。実行時間を確認する唯一の方法は、再生を監視することです。
もっと良い解決策はありますか?
私には大きな.SWFファイルがあります。私はアニメーションのデュレーションをプログラム的に、好ましくは.NETで取得する必要があります。SWFからのFlashアニメーションの時間を計算しますか?
ByteScoutは、すべてシングルフレームアニメーションであると言いました。実行時間を確認する唯一の方法は、再生を監視することです。
もっと良い解決策はありますか?
"シングルフレーム"は、メインタイムラインのステージに配置された一部の子オブジェクトでアニメーションが発生していることを意味します。あなたは子ども(または他の子孫)のtotalFrames
を見つけるために深く掘り下げなければなりません。クラスが公開されている場合は、ステージ上のすべてのオブジェクトのフレーム長をロードして表示するためにFlashファイルを設定することでこれを行うことができます。 .NET == ??。
私は自分自身で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();
}
を変更したが、それはあなたをお手伝いします願っています。
ステージ上のオブジェクトに到達するために(コードから)Flashファイルをロードするにはどうすればよいですか? .NET用のFlash編集ライブラリはありますか? (その他何か?) – Jesse
申し訳ありませんが、Flashで.NETで作業していません。私がこれに取り組んでいたのであれば、SWFをロードして精査するために、ActionScriptやFlexを使って別のSWFプログラムをビルドします。さらに詳しいヘルプが必要な場合は、私の迷惑メールで私に連絡してください:[email protected] – iND