我有一张图片,我在下面的列表中添加了一些像素。
List<Color> ycolo = new List<Color>();
for (int p = 5; p < FilteredImage.Width; p++) {
for (int k = 5; k < FilteredImage.Height ;k++)
{
ycolo.Add(FilteredImage.GetPixel(p, k));
if (k==10) { break; }
}
if (p== 20) { break; }
}
if (!ycolo.Contains(FilteredImage.GetPixel(21,11)))
{
MessageBox.Show("Im here");
}
else
{ MessageBox.Show("Im not here"); }
返回true(Im here)
,thoguh它不包含21,11
位置的像素这里有什么问题。我在Visual Studio c#中工作。
怎么做让它起作用?
答案 0 :(得分:2)
您混淆了像素的位置和颜色。
方法FilteredImage.GetPixel(21,11)
返回像素的颜色。
要测试某个位置的像素是否已添加到列表中,请使用以下代码:
List<System.Drawing.Point> ycolo = new List<System.Drawing.Point>();
for (int p = 5; p < FilteredImage.Width; p++)
{
for (int k = 5; k < FilteredImage.Height; k++)
{
ycolo.Add(new System.Drawing.Point(p, k));
if (k == 10) { break; }
}
if (p == 20) { break; }
}
if (ycolo.Contains(new System.Drawing.Point(21, 11)))
{
MessageBox.Show("Im here");
}
else
{
MessageBox.Show("Im not here");
}
答案 1 :(得分:1)
检查你的if语句。
if (!ycolo.Contains(FilteredImage.GetPixel(21,11)))
{
MessageBox.Show("Im here");
}
您正在使用!运算符,因此声明ycolo.Contains(FilteredImage.GetPixel(21,11))
将返回false但是!运营商将使整体声明为真,并将打印“我在这里”消息。
答案 2 :(得分:0)
作为进一步的改进,我建议稍微重构,因为2分:
for
上限分为2个不同的位置,例如您已写入FilteredImage.Width
和if (p == 5)
的宽度。同样的高度。最好包含像&#34;上限和#34;这样的概念。在一个地方,除非你的算法非常清晰,需要分离。所以,这就是我编写代码的方式:
for (int w = 5; w < Math.Min(FilteredImage.Width, 20); w++)
{
for (int h = 5; h < Math.Min(FilteredImage.Height, 10); h++)
{
ycolo.Add(new Point(w, h));
}
}