private static void Setup(Bitmap image, QuantizeImageSettings settings) { // Check arguments if (settings.Quantizer.UsesColorCache && settings.ColorCache == null) { throw new ArgumentNullException(nameof(settings.ColorCache)); } if (settings.Quantizer.AllowParallel && settings.ParallelCount <= 0) { throw new ArgumentOutOfRangeException(nameof(settings.ParallelCount)); } if (settings.Quantizer.UsesVariableColorCount && settings.ColorCount <= 0) { throw new ArgumentOutOfRangeException(nameof(settings.ColorCount)); } // Prepare objects settings.Ditherer?.Prepare(settings.Quantizer, image.Width, image.Height); settings.ColorCache?.Prepare(settings.ColorModel); if (settings.Quantizer.UsesColorCache) { settings.Quantizer.SetColorCache(settings.ColorCache); } if (settings.Quantizer.UsesVariableColorCount) { settings.Quantizer.SetColorCount(settings.ColorCount); } if (settings.Quantizer.AllowParallel) { settings.Quantizer.SetParallelTasks(settings.ParallelCount); } }
public static (IEnumerable <int> indeces, IList <Color> palette) Quantize(Bitmap image, QuantizeImageSettings settings) { Setup(image, settings); var colors = Decompose(image); var indices = settings.Ditherer?.Process(colors) ?? settings.Quantizer.Process(colors); return(indices, settings.Quantizer.GetPalette()); }