Рассчитать продолжительность анимации Flash из SWF? - PullRequest
0 голосов
/ 03 апреля 2012

У меня большая куча файлов .SWF. Мне нужно получить продолжительность анимации для каждой программы программно, предпочтительно в .NET.

ByteScout сказал мне, что все они - однокадровые анимации, и единственный способ узнать, как долго они работают, - это посмотреть, как они играют.

Есть ли лучшее решение?

Ответы [ 2 ]

0 голосов
/ 17 июня 2012

Я использую класс FlashHeaderReader для своего собственного.К сожалению, он не поддерживает сжатые файлы (начинается с CWS - Adobe spetification )

Я немного изменил класс.И это может работать со сжатыми SWF.Этот класс требует ICSharpCode.SharpZipLib.dll.Вы можете скачать его с здесь или 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();
    }

Надеюсь, это поможет вам.

0 голосов
/ 03 апреля 2012

«Однокадровый» означает, что анимация происходит в каком-то дочернем объекте, который был помещен на сцену главной временной шкалы.Вам придется копать глубже, чтобы найти totalFrames детей (или других потомков).Если классы общедоступны, вы можете сделать это, настроив файл Flash для загрузки и отображения длины кадра всех объектов на сцене..NET == ??.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...