Exemplo n.º 1
0
        public override TiffPixelBufferReader <TPixel> GetReader()
        {
            TiffPixelBufferReader <TPixel> reader = InnerContext.GetReader();

            if (_isFlipOrOrientation)
            {
                return(new TiffOrientedPixelBufferReader <TPixel>(reader, _flipLeftRigt, _flipTopBottom).AsPixelBufferReader());
            }
            return(new TiffFlippedPixelBufferReader <TPixel>(reader, _flipLeftRigt, _flipTopBottom).AsPixelBufferReader());
        }
Exemplo n.º 2
0
        /// <inheritdoc />
        public override async Task <TiffStreamRegion> EncodeAsync(TiffFileWriter writer, TiffPoint offset, TiffSize size, ITiffPixelBufferReader <TPixel> reader, CancellationToken cancellationToken)
        {
            if (writer is null)
            {
                throw new ArgumentNullException(nameof(writer));
            }

            if (reader is null)
            {
                throw new ArgumentNullException(nameof(reader));
            }

            if (_imageEncoder is null)
            {
                throw new InvalidOperationException("Image encoder is not configured.");
            }

            TiffPixelBufferReader <TPixel> structReader = reader.AsPixelBufferReader();

            size = new TiffSize(Math.Max(0, Math.Min(structReader.Width - offset.X, size.Width)), Math.Max(0, Math.Min(structReader.Height - offset.Y, size.Height)));
            if (size.IsAreaEmpty)
            {
                throw new ArgumentOutOfRangeException(nameof(size), "The image size is zero.");
            }

            var context = new TiffDefaultImageEncoderContext <TPixel>
            {
                MemoryPool            = _memoryPool ?? MemoryPool <byte> .Shared,
                CancellationToken     = cancellationToken,
                FileWriter            = writer,
                ImageSize             = size,
                PixelConverterFactory = TiffDefaultPixelConverterFactory.Instance,
                PixelBufferReader     = structReader
            };

            await _imageEncoder.RunAsync(context).ConfigureAwait(false);

            return(context.OutputRegion);
        }
 public TiffFlippedPixelBufferReader(TiffPixelBufferReader <TPixel> reader, bool flipLeftRight, bool flipTopBottom)
 {
     _reader        = reader;
     _flipLeftRight = flipLeftRight;
     _flipTopBottom = flipTopBottom;
 }