2016-05-14 26 views
2

我有一個圖像,我在下面給出的列表中添加一些像素。列表返回它不包含的東西

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位置什麼是錯的here.Im在Visual Studio C#工作pixle。 怎麼辦才能使它工作?

+1

那麼,像素沒有在列表中,但像素的顏色包含可以被包括在內,也許你的東西混合起來? –

+0

@FlatEric我不知道im tottaly初學者在這裏有什麼幫助嗎?像我應該製作什麼樣的清單? –

+0

我不確定你想做什麼,但是如果你想知道,如果一個位置上的像素包含在列表中(與它的顏色無關),你可以使用一個'System.Drawing'列表。點' –

回答

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"); 
} 
+0

我的聲望是不夠的dammnnnn –

+0

你不能upvote,但你可以標記爲已解決 –

+0

我做到了。非常感謝:) –

1

檢查你的陳述。

if (!ycolo.Contains(FilteredImage.GetPixel(21,11))) 
{ 
    MessageBox.Show("Im here"); 
} 

還有運營商您使用的語句ycolo.Contains(FilteredImage.GetPixel(21,11))將返回false,但!操作員將使總體聲明爲真並且它將打印「我在這裏」消息。

0

作爲進一步的改進,我會建議一個小重構,由於2分:

  • 您已將for上限分爲2個不同的位置,例如您寫入的寬度爲FilteredImage.Widthif (p == 5)。高度相同。最好在一個地方附上一個像「上限」這樣的概念,除非你的算法是非常明確的,並且需要這種分離。
  • 「p」和「k」不是變量的重要名稱,因爲您的上下文處理寬度和高度,所以改爲使用「w」和「h」,或「x」和「y」(自動爲看作笛卡爾座標)。

所以,這是我會怎麼寫代碼:

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)); 
    } 
}