使用gdi +进行半色调效果

时间:2012-01-16 15:52:15

标签: c# gdi+

我如何在GDI +中模仿this半色调效果?

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

enter image description here

1 个答案:

答案 0 :(得分:4)

我试了一下这个结果: enter image description here

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

  1. 以低饱和度绘制原始图片(使用颜色 矩阵)
  2. 以高饱和度将原始图像绘制到1)上 使用图案蒙版(即点)
  3. 我创建了这样的模板蒙版:

            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);
                    }
            }
    

    然后我使用this technique将其强加于过饱和位图。

    更新:详细说明图片的合并方式。让我们更一般地谈谈,并说我们想要使用模式蒙版组合同一图像的两个不同颜色版本,从而产生一个新图像 - 我们可以这样做:

    创建三个新的位图,所有这些位图都与原始图像具有相同的大小。称他们为bmpA,bmpB和bmpMask。

    • 将一个彩色/效果版本绘制成bmpA
    • 将其他彩色/效果版本绘制到bmpB
    • 在bmpMask(黑白)中创建遮罩
    • 使用。将bmpMask的一个R / G / B通道推入bmpB的alpha通道 transferOneARGBChannelFromOneBitmapTo另一种方法。
    • 在bmpA上绘制bmpB(因为bmpB现在有透明部分)
    • 结果现在是bmpA。可以处理bmpB和bmpMask。

    完成