Создать выбор цветовой гаммы из изображения

У меня есть изображение, и я хотел бы создать GraphicsPath представление выделения на изображении на основе некоторого порогового значения для пикселей, составляющих изображение. Например, алгоритм цветового диапазона, который учитывает пиксели со значениями цвета, близкими к данному цвету.

На данный момент моя проблема не в алгоритме выбора пикселей, а в GraphicsPath который с моим текущим кодом становится слишком сложным (слишком много точек) и, следовательно, дорогостоящим для его создания и особенно для дальнейшего управления им.

На данный момент я просто использую следующий код (в этом примере я просто беру непрозрачные пиксели), где я добавляю Rectangle за каждый взятый пиксель.

BitmapData bitmapData = sourceBitmap.LockBits(new Rectangle(0, 0, sourceBitmap.Width, sourceBitmap.Height), ImageLockMode.ReadOnly, sourceBitmap.PixelFormat);

GraphicsPath gp = new GraphicsPath();

unsafe
{
    byte* imagePointer = (byte*)bitmapData.Scan0;
    for (int x = 0; x < bitmapData.Width; x++)
    {
         for (int y = 0; y < bitmapData.Height; y++)
         {
              if (imagePointer[3] != 0)
                  gp.AddRectangle(new Rectangle(x, y, 1, 1));
              imagePointer += 4;
          }
     }
 }

Как я могу упростить этот процесс или в результате GraphicsPath получить гораздо более простой путь, в идеале только с контурами?

РЕДАКТИРОВАТЬ Затем я буду использовать путь, чтобы: показать его контуры на экране (бегущие муравьи); использовать его как маску для других изображений (отменить то, что находится вне пути); делать тесты удара (находится ли точка внутри пути). В качестве примера:

0 ответов

Другие вопросы по тегам