Exemple #1
0
        internal static byte[] GetHeader(byte[] rawData, out SwfHeader header)
        {
            int offset = 0;

            header = new SwfHeader();

            if (rawData.Length - offset < 8)
            {
                throw new ArgumentException("Data Length is less than 8 bytes");
            }

            header.Compression = (SwfCompression)rawData[offset + 0];

            if (!(Enum.GetValues(typeof(SwfCompression)).Cast <SwfCompression>().Contains(header.Compression) &&
                  rawData[offset + 1] == 0x57 && rawData[offset + 2] == 0x53))
            {
                throw new ArgumentException("This Data is not SWF");
            }

            header.Version    = rawData[offset + 3];
            header.FileLength = (int)TagUtilities.PickBytes(rawData, offset + 4, 4);


            rawData = header.Decompress(rawData);
            offset += 8;

            Rectangle rect;

            offset          += Rectangle.GetRectangle(rawData, offset, out rect);
            header.FrameSize = rect;

            header.FrameRate  = TagUtilities.PickBytes16(rawData, offset);
            offset           += 2;
            header.FrameCount = TagUtilities.PickBytes16(rawData, offset);
            offset           += 2;

            header.HeaderLength = offset;

            return(rawData);
        }