0

我有这个代码来接收图像并将其转换为黑白:

public Bitmap GrayScaleFilter(Bitmap image)
    {
        Bitmap grayScale = new Bitmap(image.Width, image.Height);

        for (Int32 y = 0; y < grayScale.Height; y++)
            for (Int32 x = 0; x < grayScale.Width; x++)
            {
                Color c = image.GetPixel(x, y);

                Int32 gs = (Int32)(c.R * 0.3 + c.G * 0.59 + c.B * 0.11);

                grayScale.SetPixel(x, y, Color.FromArgb(gs, gs, gs));
            }
        return grayScale;
    }

现在,我需要用这种黑白图像做一个半色调效果的新方法。我知道这个效果是基于这个http://www.inf.pucrs.br/~pinho/CG/Aulas/Img/IMG.htm

但是现在,如何使用它来将我的图像变成半色调?

4

1 回答 1

0

半色调的基本概念是将像素强度映射到目标圆的大小。一种可能性是以下数学:

double sum = 1.0 - (pixel / 255.0)
double size = sum * SQUARE_ROOT_2;

有了这个尺寸,你可以像这样画你的圆圈:

int maxdotsize = 10;
ellipse(x, y, 
    (size * maxdotsize), 
    (size * maxdotsize));

我在 Java 中实现了这个算法进行处理。在这里查看完整的代码。

于 2018-02-17T19:15:53.687 回答