/// <summary> /// Reads the raw image information from the specified stream. /// </summary> /// <param name="decoder">The decoder.</param> /// <param name="stream">The <see cref="Stream"/> containing image data.</param> public static async Task <IImageInfo> IdentifyAsync(this IImageDecoderInternals decoder, Stream stream) { if (stream.CanSeek) { return(decoder.Identify(stream)); } using MemoryStream ms = decoder.Configuration.MemoryAllocator.AllocateFixedCapacityMemoryStream(stream.Length); await stream.CopyToAsync(ms).ConfigureAwait(false); ms.Position = 0; return(decoder.Identify(ms)); }
/// <summary> /// Reads the raw image information from the specified stream. /// </summary> /// <param name="decoder">The decoder.</param> /// <param name="configuration">The configuration for the image.</param> /// <param name="stream">The <see cref="Stream"/> containing image data.</param> /// <param name="tooLargeImageExceptionFactory">Factory method to handle <see cref="InvalidMemoryOperationException"/> as <see cref="InvalidImageContentException"/>.</param> /// <param name="cancellationToken">The token to monitor for cancellation requests.</param> /// <exception cref="ArgumentNullException"><paramref name="stream"/> is null.</exception> /// <returns>A <see cref="Task"/> representing the asynchronous operation.</returns> public static Task <IImageInfo> IdentifyAsync( this IImageDecoderInternals decoder, Configuration configuration, Stream stream, Func <InvalidMemoryOperationException, Size, InvalidImageContentException> tooLargeImageExceptionFactory, CancellationToken cancellationToken) { try { using var bufferedReadStream = new BufferedReadStream(configuration, stream); IImageInfo imageInfo = decoder.Identify(bufferedReadStream, cancellationToken); return(Task.FromResult(imageInfo)); } catch (InvalidMemoryOperationException ex) { InvalidImageContentException invalidImageContentException = tooLargeImageExceptionFactory(ex, decoder.Dimensions); return(Task.FromException <IImageInfo>(invalidImageContentException)); } catch (OperationCanceledException) { return(Task.FromCanceled <IImageInfo>(cancellationToken)); } catch (Exception ex) { return(Task.FromException <IImageInfo>(ex)); } }
public static IImageInfo Identify( this IImageDecoderInternals decoder, Configuration configuration, Stream stream) { using var bufferedReadStream = new BufferedReadStream(configuration, stream); try { return(decoder.Identify(bufferedReadStream, default)); } catch (InvalidMemoryOperationException ex) { throw new InvalidImageContentException(decoder.Dimensions, ex); } }
/// <summary> /// Reads the raw image information from the specified stream. /// </summary> /// <param name="decoder">The decoder.</param> /// <param name="stream">The <see cref="BufferedReadStream"/> containing image data.</param> /// <exception cref="ArgumentNullException"><paramref name="stream"/> is null.</exception> /// <returns>A <see cref="Task"/> representing the asynchronous operation.</returns> public static Task <IImageInfo> IdentifyAsync(this IImageDecoderInternals decoder, BufferedReadStream stream) => Task.FromResult(decoder.Identify(stream));