Я попробовал и получил такой результат:

Это может быть место для начала. Я сделал это так:
- Нарисуйте исходную картинку с низкой насыщенностью (используя цвет
матрица)
- Нарисуйте исходное изображение на 1) с высокой насыщенностью
используя маску рисунка (то есть точки)
Я создал маску шаблона следующим образом:
using (var g = Graphics.FromImage(bmpPattern))
{
g.Clear(Color.Black);
g.SmoothingMode = SmoothingMode.HighQuality;
for (var y = 0; y < bmp.Height; y += 10)
for (var x = 0; x < bmp.Width ; x += 6)
{
g.FillEllipse(Brushes.White, x, y, 4, 4);
g.FillEllipse(Brushes.White, x + 3, y + 5, 4, 4);
}
}
А потом я применил его к перенасыщенному растровому изображению, используя эту технику .
Обновление : проработка процесса объединения изображений. Давайте поговорим немного более обобщенно и скажем, что мы хотим объединить две разные раскрашенные версии одного и того же изображения с помощью маски шаблона, в результате чего получится новое изображение - мы можем сделать это следующим образом:
Создайте ТРИ новых растровых изображения, все с тем же размером, что и исходное изображение. Назовите их bmpA, bmpB и bmpMask.
- Нарисуйте одну цветную версию / версию эффекта в bmpA
- Нарисуйте другой цветной вариант с эффектом в bmpB
- Создание маски в bmpMask (черно-белая)
- Вставьте один из каналов R / G / B bmpMask в альфа-канал bmpB, используя
Метод TransferOneARGBChannelFromOneBitmapToAnother.
- Нарисуйте bmpB поверх bmpA (поскольку bmpB теперь содержит прозрачные части)
- Результат теперь bmpA. bmpB и bmpMask могут быть уничтожены.
Готово