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