Exemple #1
0
        /// <summary>
        /// Encodes the image using a specified encoder.
        /// </summary>
        /// <param name="imageEncoder">The image encoder to use.</param>
        /// <returns>A new, corresponding encoded image.</returns>
        public EncodedImage Encode(IImageToStreamEncoder imageEncoder)
        {
            var encodedImage = new EncodedImage(this.Width, this.Height, this.PixelFormat);

            encodedImage.EncodeFrom(this, imageEncoder);
            return(encodedImage);
        }
Exemple #2
0
        /// <summary>
        /// Encodes a specified image with a specified encoder into the current encoded image.
        /// </summary>
        /// <param name="image">The image to encode.</param>
        /// <param name="imageEncoder">The image encoder to use.</param>
        /// <remarks>The image width, height and pixel format must match. The method should not be called concurrently.</remarks>
        public void EncodeFrom(Image image, IImageToStreamEncoder imageEncoder)
        {
            if (image.Width != this.Width || image.Height != this.Height || image.PixelFormat != this.PixelFormat)
            {
                throw new InvalidOperationException("Cannot encode from an image that has a different width, height, or pixel format.");
            }

            this.stream.Position = 0;
            imageEncoder.EncodeToStream(image, this.stream);
        }
Exemple #3
0
        /// <summary>
        /// Encodes a specified image with a specified encoder into the current encoded image.
        /// </summary>
        /// <param name="image">The image to encode.</param>
        /// <param name="imageEncoder">The image encoder to use.</param>
        /// <remarks>The image width, height and pixel format must match. The method should not be called concurrently.</remarks>
        public void EncodeFrom(Image image, IImageToStreamEncoder imageEncoder)
        {
            if (image.Width != this.Width || image.Height != this.Height || image.PixelFormat != this.PixelFormat)
            {
                throw new InvalidOperationException("Cannot encode from an image that has a different width, height, or pixel format.");
            }

            // reset the underlying MemoryStream - this also resets Position to 0
            this.stream.SetLength(0);
            imageEncoder.EncodeToStream(image, this.stream);
        }
Exemple #4
0
 /// <summary>
 /// Encodes an image rectangle using a specified image encoder.
 /// </summary>
 /// <param name="source">The source stream of image rectangles.</param>
 /// <param name="encoder">The image encoder to use.</param>
 /// <param name="deliveryPolicy">An optional delivery policy.</param>
 /// <param name="name">An optional name for the stream operator.</param>
 /// <returns>A stream of encoded image rectangles.</returns>
 public static IProducer <EncodedImageRectangle3D> Encode(
     this IProducer <ImageRectangle3D> source,
     IImageToStreamEncoder encoder,
     DeliveryPolicy <ImageRectangle3D> deliveryPolicy = null,
     string name = null)
 {
     return(source.Process <ImageRectangle3D, EncodedImageRectangle3D>(
                (imageRectangle3D, envelope, emitter) =>
     {
         var image = imageRectangle3D.Image.Resource;
         using var encodedImage = EncodedImagePool.GetOrCreate(image.Width, image.Height, image.PixelFormat);
         encodedImage.Resource.EncodeFrom(image, encoder);
         emitter.Post(new EncodedImageRectangle3D(imageRectangle3D.Rectangle3D, encodedImage), envelope.OriginatingTime);
     },
                deliveryPolicy,
                name ?? $"{nameof(Encode)}({encoder.Description})"));
 }
Exemple #5
0
 /// <summary>
 /// Encodes an image camera view using a specified image encoder.
 /// </summary>
 /// <param name="source">The source stream of image camera views.</param>
 /// <param name="encoder">The image encoder to use.</param>
 /// <param name="deliveryPolicy">An optional delivery policy.</param>
 /// <param name="name">An optional name for the stream operator.</param>
 /// <returns>A stream of encoded image camera views.</returns>
 public static IProducer <EncodedImageCameraView> Encode(
     this IProducer <ImageCameraView> source,
     IImageToStreamEncoder encoder,
     DeliveryPolicy <ImageCameraView> deliveryPolicy = null,
     string name = null)
 {
     return(source.Process <ImageCameraView, EncodedImageCameraView>(
                (imageCameraView, envelope, emitter) =>
     {
         var image = imageCameraView.ViewedObject.Resource;
         using var encodedImage = EncodedImagePool.GetOrCreate(image.Width, image.Height, image.PixelFormat);
         encodedImage.Resource.EncodeFrom(image, encoder);
         using var encodedImageCameraView = new EncodedImageCameraView(encodedImage, imageCameraView.CameraIntrinsics, imageCameraView.CameraPose);
         emitter.Post(encodedImageCameraView, envelope.OriginatingTime);
     },
                deliveryPolicy,
                name ?? $"{nameof(Encode)}({encoder.Description})"));
 }
Exemple #6
0
        /// <summary>
        /// Initializes a new instance of the <see cref="ImageCompressor"/> class.
        /// </summary>
        /// <param name="compressionMethod">The image compression method to be used.</param>
        public ImageCompressor(CompressionMethod compressionMethod)
        {
            this.CompressionMethod = compressionMethod;
            switch (this.CompressionMethod)
            {
            case CompressionMethod.Jpeg:
                this.encoder = new ImageToJpegStreamEncoder {
                    QualityLevel = 90
                };
                break;

            case CompressionMethod.Png:
                this.encoder = new ImageToPngStreamEncoder();
                break;

            case CompressionMethod.None:
                break;
            }

            this.decoder = new ImageFromStreamDecoder();
        }
Exemple #7
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ImageEncoder"/> class.
 /// </summary>
 /// <param name="pipeline">The pipeline to add the component to.</param>
 /// <param name="encoder">The image encoder to use.</param>
 /// <param name="name">An optional name for the component.</param>
 public ImageEncoder(Pipeline pipeline, IImageToStreamEncoder encoder, string name = null)
     : base(pipeline, name ?? $"{nameof(ImageEncoder)}({encoder.Description})")
 {
     this.encoder = encoder;
 }
Exemple #8
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ImageEncoder"/> class.
 /// </summary>
 /// <param name="pipeline">Pipeline to add this component to.</param>
 /// <param name="encoder">The image encoder to use.</param>
 public ImageEncoder(Pipeline pipeline, IImageToStreamEncoder encoder)
     : base(pipeline)
 {
     this.encoder = encoder;
 }