Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从SWF计算Flash动画的持续时间?_Flash - Fatal编程技术网

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

从SWF计算Flash动画的持续时间?,flash,Flash,我有一大堆.SWF文件。我需要以编程方式获取每个动画的持续时间,最好是在.NET中 ByteScout告诉我,它们都是单帧动画,要知道它们运行了多长时间,唯一的办法就是看它们播放 有更好的解决方案吗?“单帧”表示动画发生在某个子对象中,该子对象已放在主时间轴的舞台上。您必须深入挖掘才能找到子代(或其他子代)的totalFrames。如果类是公共的,您可以通过设置一个Flash文件来加载和显示舞台上所有对象的帧长度来实现。NET==??。我自己使用这个类。不幸的是,它不支持压缩文件(以CWS-开头

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

ByteScout告诉我,它们都是单帧动画,要知道它们运行了多长时间,唯一的办法就是看它们播放

有更好的解决方案吗?

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

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

我把课程改了一点。它也可以与压缩的swf一起工作。此类需要ICSharpCode.SharpZipLib.dll。您可以从或下载

我只更改了一个构造函数

    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();
    }
公共FlashHeaderReader(字符串文件名) { 高度=0; 宽度=0; 帧数=0; 帧率=0; _currentIndex=0; 错误=错误; FileStream fs=File.OpenRead(文件名); _数据=新字节[fs.Length]; fs.Read(_data,0,_data.Length); fs.Close(); if(System.Text.Encoding.ASCII.GetString(_data,0,3).Equals(“CWS”)) { _错误压缩=正确; } 如果(_未压缩) { var列表=新列表(_数据); var header=list.GetRange(1,7).ToArray(); 表1.1(0,8); _data=list.ToArray(); 使用(var str=新内存流(_数据)) 使用(var dStr=新的充气输入流(str)) { var buffer=新字节[4096]; 列表=新列表{(字节)'F'}; 列表.添加范围(标题); 整数计数; 而((count=dStr.Read(buffer,04096))>0) { list.AddRange(buffer.Take(count)); } _data=list.ToArray(); } } ParseHeader(); }
希望它能对您有所帮助。

我可以用什么(从代码)加载Flash文件来获取舞台上的对象?有针对.NET的Flash编辑库吗?(或其他什么?)对不起,我没有在Flash中使用.NET。如果我在做这项工作,我会使用Actionscript或Flex构建另一个SWF程序来加载和清理SWF。如果您需要更多帮助,请通过我的垃圾邮件与我联系:testdee@yahoo.com