使用gdi +进行半色调效果

我将如何在GDI +中模仿这种半色调效果?

它几乎看起来像Floyd-Steinberg抖动的图像覆盖了一个完整的图像,但我不相信。

在此处输入图像描述

我试了一下这个结果: 在此处输入图像描述

它可能是一个开始的地方。 我是这样做的:

  1. 以低饱和度绘制原始图像(使用颜色矩阵)
  2. 使用图案蒙版(即点)将原始图像绘制到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中创建蒙版(黑白)
  • 使用transferOneARGBChannelFromOneBitmapToAnother方法将bmpMask的一个R / G / B通道推入bmpB的alpha通道。
  • 在bmpA上绘制bmpB(因为bmpB现在有透明部分)
  • 结果现在是bmpA。 可以处理bmpB和bmpMask。

完成