Вот быстрое и простое решение.
Используется функция, которая будет плагин с постом, который вы можете найти здесь .
Это функция:
public Color ToWhiteExceptYellow(Color c, int range)
{
float hueC = c.GetHue();
float e = 1.5f * range; // you can adapt this nuumber
float hueY = Color.Yellow.GetHue();
float delta = hueC - hueY;
bool ok = (Math.Abs(delta) < e);
//if (!ok) { ok = (Math.Abs(360 + delta) < e); } // include these lines ..
//if (!ok) { ok = (Math.Abs(360 - delta) < e); } // for reddish colors!
return ok ? c : Color.White;
}
Хорошо работает с желтым, но поскольку цветовые оттенки - это обтекание число , ему потребуется больше кода для работы сцвет точки обтекания (красный).Я добавил две строки, чтобы помочь.
Чтобы это работало, измените эти строки в связанном посте:
// pick one of our filter methods
ModifyHue hueChanger = new ModifyHue(ToWhiteExceptYellow);
.. и ..
// we pull the bitmap from the image
Bitmap bmp = new Bitmap( (Bitmap)pictureBox1.Image); // create a copy
..и ..
c = hueChanger(c, trackBar1.Value); // insert a number you like, mine go from 1-10
.. и ..:
// we need to re-assign the changed bitmap
pictureBox2.Image = (Bitmap)bmp; // show in a 2nd picturebox
Не забудьте включить делегата:
public delegate Color ModifyHue(Color c, int ch);
и использованиепредложение:
using System.Drawing.Imaging;
Обратите внимание, что нужно избавиться от старого контента, чтобы избежать утечки изображений, например, так:
Bitmap dummy = (Bitmap )pictureBox2.Image;
pictureBox2.Image = null;
if (dummy != null) dummy.Dispose;
// now assign the new image!
Давайте посмотрим на это:
![enter image description here](https://i.stack.imgur.com/IMmyl.gif)
Не стесняйтесь расширить на этом.Вы можете изменить сигнатуру функции, включив в нее целевой цвет и добавить диапазоны яркости и / или насыщенности.