public IEnumerable<MouseDragAction> GetDrawInstructions(List<ColorSpot> colorPalette, IDictionary<string, string> options = null, IBrushChanger brushChanger = null)
 {
     if (!colorPalette.Any())
     {
         throw new ArgumentException("I need some colors. Give me some colors. Thanks!");
     }
     var output = new List<MouseDragAction>();
     var colorPixels = colorPalette.ToDictionary(colorSpot => colorSpot, colorSpot => new List<Point>());
     using (var bitmap = new Bitmap(_bitmapPath))
     {
         bitmap.LoopThroughPixels((point, color) =>
             {
                 var selectedColor = colorPalette.OrderBy(c => c.Color.DifferenceTo(color)).FirstOrDefault();
                 if (selectedColor == null || !colorPixels.ContainsKey(selectedColor) ||
                     selectedColor.Color.DifferenceTo(Color.White) == 0)
                 {
                     return;
                 }
                 colorPixels[selectedColor].Add(point);
             });
     }
     foreach (var colorPixel in colorPixels.Where(colorPixel => colorPixel.Value.Any()))
     {
         output.Add(new MouseDragAction(new List<Point> { colorPixel.Key.Point }, true, colorPixel.Key.Color));
         var actions = colorPixel.Value.Select(point => new MouseDragAction(new List<Point> { point })).ToList();
         if (options.GetBoolValueOrDefault("MixPoints", false))
         {
             actions = actions.Shuffle().ToList();
         }
         output.AddRange(actions);
     }
     return output.ToArray();
 }