コード例 #1
0
        /// <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));
        }
コード例 #2
0
 /// <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));
     }
 }
コード例 #3
0
        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);
            }
        }
コード例 #4
0
 /// <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));