DEBUG and RELEASE modeWhen 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)
1) Load image from MemoryStream, filled from this Bitmap
(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;
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!
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?