使用gdi +进行半色调效果
我将如何在GDI +中模仿这种半色调效果?
它几乎看起来像Floyd-Steinberg抖动的图像覆盖了一个完整的图像,但我不相信。
我试了一下这个结果:
它可能是一个开始的地方。 我是这样做的:
- 以低饱和度绘制原始图像(使用颜色矩阵)
- 使用图案蒙版(即点)将原始图像绘制到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。
完成