2014-02-13 76 views
0

我有一个列表,它包含了我图像中黑色像素的坐标(x,y)。如何随机访问我的列表元素的百分比?

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

难道你不知道我可以如何随意改变黑色像素的颜色为白色的特定比例吗?即将80%的黑色像素变成白色?非常感谢

+0

变化'blackPixels.Count * 0.8'像素:) –

回答

2
Random rand = new Random(); 
foreach (Point p in blackPixels) { 

    if (rnd.Next(100) < 80) { 
    // turn p to white 
    } 

} 

对于列表中它产生0到99之间的数字的每个元素,这意味着80%的时间的数量将是0和79之间的这种方式打开的像素的80%至白色。

如果你想改变像素的正是 80%,你可以去周围的其他方式:

var numberOfPixelsToTurn = blackPixels.Count * 0.8 
var rand = new Random(); 

for (int i; i < numberOfPixelsToTurn ; i++) { 
    int itemToTurn = rand.Next(blackPixels.Count); 
    TurnToWhite(blackPixels[itemToTurn]); 
    blackPixels.RemoveAt(itemToTurn); 
} 
+0

谢谢你的答案,这个函数实际上困惑我每次随机创建一个整数在0到99之间,它检查是否超过80。这是否意味着它将黑色像素的80%变成白色? – CowBoy

+0

是否将每个点以80%的概率变成白色,与将80%的点变成白色相同?我会说它很接近,但可能会有所不同。 – user995219

+0

统计是。 –

1

使用Random类。遍历每个像素。调用随机。 Next(int)方法来产生0到100之间的随机整数。如果随机数小于80(产生80%的机会),将像素更改为白色。

+0

这是一个很好的解决方案,如果他想要一个随机的80%白色。不幸的是,他没有告诉我们他是想要随机还是线性的。 – crush

+0

@crush当然,他做了,再读一遍这个问题。 “...可以随机更改颜色...” – TypeIA

+0

Doh。谢谢。不知道我是如何忽略这一点的。我为这个答案投票,因为它告诉他如何去做,解释理论,但不会为他做。 – crush

-1
Random rnd = new Random();  
for(int x=0;x<blackPixels.Length;x++){ 

    int randomNumber = rnd.next(100); 
    if(randomNumber <= 80){ 

     blackPixels[x] = // add a white pixel 
    } 

} 

希望我帮了忙!

+1

-1:每次通过循环时不要创建一个新的Random();没有显示如何使用随机数获得80%的概率。 (-1自删除后编辑) – TypeIA

+0

新随机是外foreach ... –

+0

正如你大概了解,我刚刚按下我的输入提前 –