Пример #1
0
        private static void AddError(string errorMessage, List <Directory> directories)
        {
            ErrorDirectory directory = directories.OfType <ErrorDirectory>().FirstOrDefault();

            if (directory == null)
            {
                directories.Add(new ErrorDirectory(errorMessage));
            }
            else
            {
                directory.AddError(errorMessage);
            }
        }
Пример #2
0
        private static Directory?ReadGifExtensionBlock(SequentialReader reader)
        {
            var extensionLabel = reader.GetByte();
            var blockSizeBytes = reader.GetByte();
            var blockStartPos  = reader.Position;

            Directory?directory;

            switch (extensionLabel)
            {
            case 0x01:
            {
                directory = ReadPlainTextBlock(reader, blockSizeBytes);
                break;
            }

            case 0xf9:
            {
                directory = ReadControlBlock(reader, blockSizeBytes);
                break;
            }

            case 0xfe:
            {
                directory = ReadCommentBlock(reader, blockSizeBytes);
                break;
            }

            case 0xff:
            {
                directory = ReadApplicationExtensionBlock(reader, blockSizeBytes);
                break;
            }

            default:
            {
                directory = new ErrorDirectory($"Unsupported GIF extension block with type 0x{extensionLabel:X2}.");
                break;
            }
            }

            var skipCount = blockStartPos + blockSizeBytes - reader.Position;

            if (skipCount > 0)
            {
                reader.Skip(skipCount);
            }

            return(directory);
        }
        private Directory GetCurrentOrErrorDirectory()
        {
            if (CurrentDirectory != null)
            {
                return(CurrentDirectory);
            }
            var error = Directories.OfType <ErrorDirectory>().FirstOrDefault();

            if (error != null)
            {
                return(error);
            }
            error = new ErrorDirectory();
            PushDirectory(error);
            return(error);
        }