private Task EncodeImageAsync <TPixel>(ImageFrame <TPixel> image, TiffImageFileDirectoryWriter ifdWriter, CancellationToken cancellationToken) where TPixel : unmanaged, IPixel <TPixel>
        {
            ITiffEncoderOptions options = _options;

            var builder = new TiffImageEncoderBuilder();

            builder.MemoryPool = _memoryPool;
            builder.PhotometricInterpretation = options.PhotometricInterpretation;
            builder.Compression              = options.Compression;
            builder.IsTiled                  = options.IsTiled;
            builder.RowsPerStrip             = options.RowsPerStrip;
            builder.TileSize                 = new TiffSize(options.TileSize.Width, options.TileSize.Height);
            builder.Predictor                = options.Predictor;
            builder.EnableTransparencyForRgb = options.EnableTransparencyForRgb;
            builder.Orientation              = options.Orientation;
            builder.DeflateCompressionLevel  = options.DeflateCompressionLevel;
            builder.JpegOptions              = new TiffJpegEncodingOptions {
                Quality = options.JpegQuality, OptimizeCoding = options.JpegOptimizeCoding
            };
            builder.HorizontalChromaSubSampling = options.HorizontalChromaSubSampling;
            builder.VerticalChromaSubSampling   = options.VerticalChromaSubSampling;

            TiffImageEncoder <TPixel> encoder = builder.BuildForImageSharp <TPixel>();

            return(encoder.EncodeAsync(ifdWriter, image, cancellationToken));
        }
        public DeepZoomRipper(DeepZoomRipperOptions options, HttpClientInitializationOptions httpClientInitializationOptions, string outputFile)
        {
            _options = options = options ?? DeepZoomRipperOptions.Default;

            if (httpClientInitializationOptions == HttpClientInitializationOptions.InitializeWithCookieContainer)
            {
                _cookieContainer = new CookieContainer();
                HttpClientHandler handler = new HttpClientHandler
                {
                    CookieContainer = _cookieContainer
                };
                _http = new HttpClient(handler)
                {
                    Timeout = Timeout.InfiniteTimeSpan
                };
            }
            else if (httpClientInitializationOptions == HttpClientInitializationOptions.InitializeWithoutCookieContainer)
            {
                _http = new HttpClient()
                {
                    Timeout = Timeout.InfiniteTimeSpan
                };
            }

            _outputFile = outputFile;

            _configuration = Configuration.Default.Clone();
            _configuration.MaxDegreeOfParallelism = 1;

            var builder = new TiffImageEncoderBuilder();

            builder.PhotometricInterpretation = TiffPhotometricInterpretation.YCbCr;
            builder.IsTiled  = true;
            builder.TileSize = new TiffSize(OutputTileSize, OutputTileSize);
            builder.HorizontalChromaSubSampling = 2;
            builder.VerticalChromaSubSampling   = 2;
            builder.Compression = TiffCompression.Jpeg;
            builder.JpegOptions = new TiffJpegEncodingOptions {
                OptimizeCoding = true
            };

            _encoder = builder.BuildForImageSharp <Rgb24>();
        }