如何在黑白位图图像中添加噪点?

时间:2014-02-11 18:21:41

标签: c# image bitmap

我有一个黑白图像,我需要存储后面像素的位置,然后通过将其中一半随机变为白色来添加一些噪音。
任何人都可以告诉我如何存储只有黑色像素的位置,并随机将其中一半变为白色?

1 个答案:

答案 0 :(得分:2)

您可以创建List<Point>来存储黑色像素。然后迭代它并随机更改它们:

List<Point> blackPixels = new List<Point>();

现在在你的循环中:

else if (color.ToArgb() == Color.Black.ToArgb())
{
        blackColor++;
        blackPixels.Add(new Point(x,y));
}

当您想添加噪音时,请执行以下操作:

Random r = new Random();

foreach(Point p in blackPixels) 
{
    if(r.NextDouble() < 0.5) 
    {
        bmp.SetPixel(p.X,p.Y,Color.White);
    }
}

这将统计将大约一半的黑色像素设置为白色,但可能更多或更少。如果你真的希望完全一半,那么你可以随机选择从0到n的一组n / 2个随机数而不重复,并切换blackPixels中这些索引的像素。或者您甚至可以随机播放blackPixels列表,然后更改其中的前n / 2个。

但请注意,GetPixelSetPixel的效果并不理想。如果您的图片很大,请务必查看LockBits以获得更好的效果。