Imagesharp: "ArgumentOutOfRangeException: Specified argument was out of the range of valid values" when trying to quantize image from MemoryStream with transparent pixels.

Created on 9 Jan 2021  路  5Comments  路  Source: SixLabors/ImageSharp

Prerequisites

  • [x] I have written a descriptive issue title
  • [x] I have verified that I am running the latest version of ImageSharp
  • [x] I have verified if the problem exist in both DEBUG and RELEASE mode
  • [x] I have searched open and closed issues to ensure it has not already been reported

Description

When I trying to quantize image from MemoryStream (which filled from System.Drawing.Bitmap), this exception throws:

ArgumentOutOfRangeException: Specified argument was out of the range of valid values.

   at System.ThrowHelper.ThrowArgumentOutOfRangeException()
   at SixLabors.ImageSharp.Processing.Processors.Quantization.OctreeQuantizer`1.AddPaletteColors(Buffer2DRegion`1 pixelRegion)
   at SixLabors.ImageSharp.Processing.Processors.Quantization.QuantizerUtilities.BuildPaletteAndQuantizeFrame[TPixel](IQuantizer`1 quantizer, ImageFrame`1 source, Rectangle bounds)
   at SixLabors.ImageSharp.Processing.Processors.Quantization.QuantizeProcessor`1.OnFrameApply(ImageFrame`1 source)
   at SixLabors.ImageSharp.Processing.Processors.ImageProcessor`1.Apply(ImageFrame`1 source)

Steps to Reproduce

1) Load image from MemoryStream, filled from this Bitmap sample (img.PixelFormat is PixelFormat.Format32bppArgb):

SixLabors.ImageSharp.Image<SixLabors.ImageSharp.PixelFormats.Rgba32> imgIS;

using (MemoryStream memoryStream = new MemoryStream())
{
    img.Save(memoryStream, ImageFormat.Png);

    memoryStream.Seek(0, SeekOrigin.Begin);

    imgIS = SixLabors.ImageSharp.Image.Load<SixLabors.ImageSharp.PixelFormats.Rgba32>(memoryStream, new SixLabors.ImageSharp.Formats.Png.PngDecoder());
}

2) Quantize it.

SixLabors.ImageSharp.Processing.Processors.Quantization.IQuantizer quantizer = new SixLabors.ImageSharp.Processing.Processors.Quantization.OctreeQuantizer(new SixLabors.ImageSharp.Processing.Processors.Quantization.QuantizerOptions { MaxColors = 81 });
imgIS.Mutate(x => x.Quantize(quantizer));

One detail: I am using ImageSharp without using SixLabors.ImageSharp;, only using SixLabors.ImageSharp.Processing;

System Configuration

  • SixLabors.ImageSharp version - 1.0.2:
  • Environment: Windows 7 Ultimate SP1 x64.
  • .NET Framework version: 4.8.03761; .NET version - 5.0.101 (project uses .NET 5.0).
  • Additional information: Microsoft Visual Studio Community 2019, version 16.8.3.
duplicate

Most helpful comment

I think this issue is the same as #1505. It was fixed with #1506.

@VladiStep could you try our latest version of ImageSharp from the MyGet Feed and test if the issue is still there or fixed?

All 5 comments

Update: similar exception thrown on "Desert.jpg" from standard Windows 7 "Sample pictures" folder, even if I load an image like that:

SixLabors.ImageSharp.Image<SixLabors.ImageSharp.PixelFormats.Rgba32> imgIS = SixLabors.ImageSharp.Image.Load<SixLabors.ImageSharp.PixelFormats.Rgba32>(fileName);

Exception stack trace:

ArgumentOutOfRangeException: Specified argument was out of the range of valid values.

   at SixLabors.ImageSharp.Processing.Processors.ImageProcessor`1.Apply(ImageFrame`1 source)
   at SixLabors.ImageSharp.Processing.Processors.ImageProcessor`1.SixLabors.ImageSharp.Processing.Processors.IImageProcessor<TPixel>.Execute()

After disabling "Just my code", I found exact source of exception:
ReadOnlyMemory<TPixel> val2 = System.Memory<TPixel>.op_Implicit(paletteOwner.get_Memory().Slice(0, Math.Min(paletteIndex + 2, 256));
in AddPaletteColors(Buffer2DRegion`1 pixelRegion) method.

paletteIndex = 80, maxColors = 81 .

I think this issue is the same as #1505. It was fixed with #1506.

@VladiStep could you try our latest version of ImageSharp from the MyGet Feed and test if the issue is still there or fixed?

I think this issue is the same as #1505. It was fixed with #1506.

@VladiStep could you try our latest version of ImageSharp from the MyGet Feed and test if the issue is still there or fixed?

Yes, that version is fixed it.

@VladiStep Thanks for providing so much information to let us triage this issue. We really appreciate it!

Was this page helpful?
0 / 5 - 0 ratings