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

它几乎看起来像是覆盖完整图像的 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);
                    }
            }
    

    然后我使用 this technique 将它强加在过饱和的位图上。

    更新 :详细说明图像如何合并。让我们更一般地讨论一下,假设我们想使用图案蒙版组契约(Contract)一图像的两个不同着色版本,从而产生一个新图像 - 我们可以这样做:

    创建三个新的位图,它们的大小都与原始图像相同。称它们为 bmpA、bmpB 和 bmpMask。
  • 在 bmpA 中绘制一个彩色/效果版本
  • 将其他颜色/效果版本绘制到 bmpB
  • 在 bmpMask(黑白)中创建蒙版
  • 使用 bmpMask 的 R/G/B channel 之一将其插入 bmpB 的 alpha channel
    transferOneARGBChannelFromOneBitmapToAnother 方法。
  • 在 bmpA 上绘制 bmpB(因为 bmpB 现在有透明部分)
  • 结果现在是 bmpA。 bmpB 和 bmpMask 可以处理。

  • 完毕

    关于c# - gdi+ 中的半色调效果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8882512/

    10-10 18:38