Exemplo n.º 1
0
        void ReadBlocksFromFile(BinaryReader reader)
        {
            GifGraphicsControlExtension capturedExtension = null;

            while (true)
            {
                byte blockType = reader.ReadByte();
                byte extensionType;

                switch (blockType)
                {
                    case GifConstants.ImageDescriptorLabel:
                        GifFrame frame = new GifFrame();
                        frame.ReadImageDescriptorFromFile(reader, capturedExtension);
                        _frames.Add(frame);
                        capturedExtension = null;
                        break;

                    case GifConstants.FileTerminatorLabel:
                        return;

                    case GifConstants.ExtensionLabel:
                        extensionType = reader.ReadByte();

                        switch (extensionType)
                        {
                            case GifConstants.GraphicsControlExtensionSubLabel:
                                capturedExtension = new GifGraphicsControlExtension();
                                capturedExtension.ReadFromFile(reader);
                                break;

                            default:
                                ReadUnknownBlockFromFile(reader, true);
                                break;
                        }

                        ReadBlockTerminatorFromFile(reader);
                        break;

                    default:
                        ReadUnknownBlockFromFile(reader, false);
                        ReadBlockTerminatorFromFile(reader);
                        break;
                }
            }
        }