从SWF计算Flash动画的持续时间?

时间:2012-04-03 15:07:16

标签: flash

我有一大堆.SWF文件。我需要以编程方式获取每个动画的持续时间,最好是在.NET中。

ByteScout告诉我他们都是单帧动画,找出他们跑多久的唯一方法就是看他们玩。

有更好的解决方案吗?

2 个答案:

答案 0 :(得分:0)

“单帧”表示动画发生在某个子对象中,该对象已放在主时间轴的舞台上。你必须深入挖掘才能找到孩子(或其他后代)的totalFrames。如果类是公共的,则可以通过设置Flash文件来加载和显示舞台上所有对象的帧长度来完成此操作。 .NET == ??。

答案 1 :(得分:0)

我自己使用FlashHeaderReader类。不幸的是,它不支持压缩文件(以CWS开头 - Adobe spetification

我已经改变了一下课程。它也适用于压缩swf。此类需要ICSharpCode.SharpZipLib.dll。您可以从hereICSharpCode下载。

我只更改了构造函数

    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();
    }

希望它会帮助你。