コード例 #1
0
		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;
		}
コード例 #2
0
        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());
        }
コード例 #3
0
        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);
        }