Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何向黑白位图图像添加噪波?_C#_Image_Bitmap - Fatal编程技术网

C# 如何向黑白位图图像添加噪波?

C# 如何向黑白位图图像添加噪波?,c#,image,bitmap,C#,Image,Bitmap,我有一个黑白图像,我需要存储后面像素的位置,然后通过随机将它们的一半变成白色来添加一些噪声。 有谁能告诉我如何只存储黑色像素的位置,并将其中的一半随机变成白色?您可以创建一个列表来存储黑色像素。然后迭代并随机更改它们: List<Point> blackPixels = new List<Point>(); 当你想添加噪音时,只需执行以下操作: Random r = new Random(); foreach(Point p in blackPixels) {

我有一个黑白图像,我需要存储后面像素的位置,然后通过随机将它们的一半变成白色来添加一些噪声。

有谁能告诉我如何只存储黑色像素的位置,并将其中的一半随机变成白色?

您可以创建一个
列表来存储黑色像素。然后迭代并随机更改它们:

List<Point> blackPixels = new List<Point>();
当你想添加噪音时,只需执行以下操作:

Random r = new Random();

foreach(Point p in blackPixels) 
{
    if(r.NextDouble() < 0.5) 
    {
        bmp.SetPixel(p.X,p.Y,Color.White);
    }
}
Random r=new Random();
foreach(点p,黑色像素)
{
if(r.NextDouble()<0.5)
{
bmp.SetPixel(p.X,p.Y,Color.White);
}
}
从统计上来说,这会将大约一半的黑色像素设置为白色,但它可能或多或少。如果您真的想要正好一半,那么您可以在0到n之间随机选取一组n/2随机数,而不重复,并在
blackPixels
中切换这些索引处的像素。或者你甚至可以洗牌你的
黑像素列表
,然后改变前n/2个


但是,请注意,
GetPixel
SetPixel
的性能不是很好。如果您的图像较大,请务必查看是否有更好的性能。

问题到底是什么?你哪部分有问题?具体点。马特·伯兰,我刚刚试过你的代码,实际上它没有添加任何噪音,只是再次打印图像……你能告诉我如何打印新的bmp图像吗?@user3266873:我的错误应该是
NextDouble
而不是
Next
Next
返回一个int,因此它不太可能小于<0.5!
Random r = new Random();

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