Создать выбор цветовой гаммы из изображения
У меня есть изображение, и я хотел бы создать 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
получить гораздо более простой путь, в идеале только с контурами?
РЕДАКТИРОВАТЬ Затем я буду использовать путь, чтобы: показать его контуры на экране (бегущие муравьи); использовать его как маску для других изображений (отменить то, что находится вне пути); делать тесты удара (находится ли точка внутри пути). В качестве примера: