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()); }
/// <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; }