public Stream Generate(int size) { int next = random.Next(0, _buffer.Length); var stream = new MemoryStream(); using (var repeatingStream = new RepeatingStream(_buffer, next, size)) { repeatingStream.CopyTo(stream, size); } stream.Position = 0; return stream; }
public void RepeatingStream_RepeatsInnerStreamData(byte[] data, int repeatAmount) { RepeatingStream repeatingStream = new RepeatingStream(new MemoryStream(data) { Position = 0 }, repeatAmount); Assert.AreEqual(0, repeatingStream.Position); Assert.AreEqual(data.Length * repeatAmount, repeatingStream.Length); MemoryStream ouputStream = new MemoryStream(); repeatingStream.CopyTo(ouputStream); Assert.AreEqual(repeatingStream.Length, repeatingStream.Position); CollectionAssert.AreEqual( Enumerable.Range(0, repeatAmount).SelectMany(i => data).ToArray(), ouputStream.ToArray()); }
protected override async Task <Stream> CreateImageWriterStreamAsync(ImageConfiguration configuration, Stream output, long totalBytes) { Imaging.ImageFormat imageFormat = ImageFormatFactory.GetFormat(configuration.Format); var pixelStorageSerializer = new PixelStorageOptionsSerializer(); totalBytes += pixelStorageSerializer.CalculateStorageLength(imageFormat); ImageDimensions embeddedImageDimensions = null; PixelStorageOptions pixelStorageOptions; Stream embeddedImageStream = null; if (configuration.HasEmbeddedImage) { embeddedImageDimensions = new ImageDimensions(configuration.EmbeddedImage.Image); pixelStorageOptions = _pixelStorageCalculator.CalculatePixelStorageOptions( imageFormat, configuration.EmbeddedImage.EmbeddedPixelStorage, embeddedImageDimensions, totalBytes); embeddedImageStream = imageFormat.LoadPixelDataStream(configuration.EmbeddedImage.Image); } else { pixelStorageOptions = imageFormat.PixelStorageWithBitsPerChannel( 8, PixelStorageOptions.BitStorageMode.MostSignificantBits); } byte[] pixelStorageBytes = await pixelStorageSerializer.SerializeToBytesAsync(pixelStorageOptions); int embeddedImageRepeats; ImageOptions imageOptions = GenerateImageOptions( configuration, imageFormat, CalculateImageDimensions(imageFormat, pixelStorageOptions, embeddedImageDimensions, totalBytes, out embeddedImageRepeats)); Stream imageStream = imageFormat.CreateWriter(imageOptions).CreateOutputStream(output, true, EncodingConfiguration.BufferSize); await WriteHeaderAsync(imageStream); await imageStream.WriteAsync(pixelStorageBytes, 0, pixelStorageBytes.Length); if (configuration.HasEmbeddedImage) { var repeatingImageStream = new RepeatingStream(embeddedImageStream, embeddedImageRepeats); return(new PixelStorageWriterStream( imageStream, new SubStream( repeatingImageStream, imageStream.Position, repeatingImageStream.Length - repeatingImageStream.Position - imageStream.Position), pixelStorageOptions, leaveOpen: false, bufferSize: EncodingConfiguration.BufferSize)); } return(imageStream); }