/// <summary> /// Decodes the image from the specified stream to the <see cref="ImageFrame{TPixel}"/>. /// </summary> /// <typeparam name="TPixel">The pixel format.</typeparam> /// <param name="configuration">The configuration for the image.</param> /// <param name="stream">The <see cref="Stream"/> containing image data.</param> /// <returns>The decoded image.</returns> public Image <TPixel> Decode <TPixel>(Configuration configuration, Stream stream) where TPixel : struct, IPixel <TPixel> { var decoder = new PngDecoderCore(configuration, this); return(decoder.Decode <TPixel>(stream)); }
/// <summary> /// Decodes the image from the specified stream to the <see cref="ImageFrame{TPixel}"/>. /// </summary> /// <typeparam name="TPixel">The pixel format.</typeparam> /// <param name="configuration">The configuration for the image.</param> /// <param name="stream">The <see cref="Stream"/> containing image data.</param> /// <returns>The decoded image.</returns> public Image <TPixel> Decode <TPixel>(Configuration configuration, Stream stream) where TPixel : unmanaged, IPixel <TPixel> { var decoder = new PngDecoderCore(configuration, this); try { return(decoder.Decode <TPixel>(stream)); } catch (InvalidMemoryOperationException ex) { Size dims = decoder.Dimensions; // TODO: use InvalidImageContentException here, if we decide to define it // https://github.com/SixLabors/ImageSharp/issues/1110 throw new ImageFormatException($"Can not decode image. Failed to allocate buffers for possibly degenerate dimensions: {dims.Width}x{dims.Height}.", ex); } }
/// <summary> /// Decodes the image from the specified stream to the <see cref="ImageFrame{TPixel}"/>. /// </summary> /// <typeparam name="TPixel">The pixel format.</typeparam> /// <param name="configuration">The configuration for the image.</param> /// <param name="stream">The <see cref="Stream"/> containing image data.</param> /// <returns>The decoded image.</returns> public Image <TPixel> Decode <TPixel>(Configuration configuration, Stream stream) where TPixel : unmanaged, IPixel <TPixel> { var decoder = new PngDecoderCore(configuration, this); try { return(decoder.Decode <TPixel>(stream)); } catch (InvalidMemoryOperationException ex) { Size dims = decoder.Dimensions; PngThrowHelper.ThrowInvalidImageContentException($"Can not decode image. Failed to allocate buffers for possibly degenerate dimensions: {dims.Width}x{dims.Height}.", ex); // Not reachable, as the previous statement will throw a exception. return(null); } }