Пример #1
0
        /// <summary>
        /// Decodes the image using a specified decoder.
        /// </summary>
        /// <param name="imageDecoder">The image decoder to use.</param>
        /// <returns>A new, corresponding decoded image.</returns>
        public Image Decode(IImageFromStreamDecoder imageDecoder)
        {
            var image = new Image(this.Width, this.Height, this.PixelFormat);

            image.DecodeFrom(this, imageDecoder);
            return(image);
        }
Пример #2
0
        /// <summary>
        /// Decodes a specified encoded image with a specified decoder into the current image.
        /// </summary>
        /// <param name="encodedImage">The encoded image to decode.</param>
        /// <param name="imageDecoder">The image decoder to use.</param>
        /// <remarks>The image width, height and pixel format must match. The method should not be called concurrently.</remarks>
        public void DecodeFrom(EncodedImage encodedImage, IImageFromStreamDecoder imageDecoder)
        {
            if (encodedImage.Width != this.Width || encodedImage.Height != this.Height ||
                (encodedImage.PixelFormat != PixelFormat.Undefined && encodedImage.PixelFormat != this.PixelFormat))
            {
                throw new InvalidOperationException("Cannot decode from an encoded image that has a different width, height, or pixel format.");
            }

            imageDecoder.DecodeFromStream(encodedImage.ToStream(), this);
        }
Пример #3
0
 /// <summary>
 /// Decodes an encoded image image rectangle using a specified image decoder.
 /// </summary>
 /// <param name="source">The source stream of encoded image rectangles.</param>
 /// <param name="decoder">The image decoder 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 decoded image rectangles.</returns>
 public static IProducer <ImageRectangle3D> Decode(
     this IProducer <EncodedImageRectangle3D> source,
     IImageFromStreamDecoder decoder,
     DeliveryPolicy <EncodedImageRectangle3D> deliveryPolicy = null,
     string name = nameof(Decode))
 {
     return(source.Process <EncodedImageRectangle3D, ImageRectangle3D>(
                (encodedImageRectangle3D, envelope, emitter) =>
     {
         var encodedImage = encodedImageRectangle3D.Image.Resource;
         using var image = ImagePool.GetOrCreate(encodedImage.Width, encodedImage.Height, encodedImage.PixelFormat);
         image.Resource.DecodeFrom(encodedImage, decoder);
         emitter.Post(new ImageRectangle3D(encodedImageRectangle3D.Rectangle3D, image), envelope.OriginatingTime);
     },
                deliveryPolicy,
                name));
 }
Пример #4
0
 /// <summary>
 /// Decodes an encoded image camera view using a specified image decoder.
 /// </summary>
 /// <param name="source">The source stream of encoded image camera views.</param>
 /// <param name="decoder">The image decoder 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 decoded image camera views.</returns>
 public static IProducer <ImageCameraView> Decode(
     this IProducer <EncodedImageCameraView> source,
     IImageFromStreamDecoder decoder,
     DeliveryPolicy <EncodedImageCameraView> deliveryPolicy = null,
     string name = nameof(Decode))
 {
     return(source.Process <EncodedImageCameraView, ImageCameraView>(
                (encodedImageCameraView, envelope, emitter) =>
     {
         var encodedImage = encodedImageCameraView.ViewedObject.Resource;
         using var image = ImagePool.GetOrCreate(encodedImage.Width, encodedImage.Height, encodedImage.PixelFormat);
         image.Resource.DecodeFrom(encodedImage, decoder);
         using var imageCameraView = new ImageCameraView(image, encodedImageCameraView.CameraIntrinsics, encodedImageCameraView.CameraPose);
         emitter.Post(imageCameraView, envelope.OriginatingTime);
     },
                deliveryPolicy,
                name));
 }
Пример #5
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();
        }
Пример #6
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ImageDecoder"/> class.
 /// </summary>
 /// <param name="pipeline">Pipeline to add this component to.</param>
 /// <param name="decoder">The image decoder to use.</param>
 public ImageDecoder(Pipeline pipeline, IImageFromStreamDecoder decoder)
     : base(pipeline)
 {
     this.decoder = decoder;
 }
Пример #7
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ImageDecoder"/> class.
 /// </summary>
 /// <param name="pipeline">The pipeline to add the component to.</param>
 /// <param name="decoder">The image decoder to use.</param>
 /// <param name="name">An optional name for the component.</param>
 public ImageDecoder(Pipeline pipeline, IImageFromStreamDecoder decoder, string name = nameof(ImageDecoder))
     : base(pipeline, name)
 {
     this.decoder = decoder;
 }