2013-12-15 213 views
0

我創建了一個處理c#中圖像的程序。出於某種原因,我已經做了幾乎最簡單的雙循環可能,它拒絕工作。該循環每次都可靠地結束於x = 78和y = 78。我一直在看這個,我無法弄清楚!代碼:For循環過早結束

try 
{ 
    for (int y = 0; y < inputHeight; y++) 
    { 
     for (int x = 0; x < inputWidth; x++) 
     { 
      if (x == 0 && y == 0) 
       continue; 
      int xpix = x; 
      int ypix = y; 
      Color color = inputImage.GetPixel(xpix, ypix); 
      colorBucket[counter] = color.R; 
      if (counter < byteSize - 1) 
       colorBucket[counter + 1] = color.G; 
      if (counter < byteSize - 2) 
       colorBucket[counter + 2] = color.B; 
      counter += 3;   
     } 
    } 
} 
catch (Exception e) 
{ 
    System.Diagnostics.Debugger.Log(1, "Error", e.ToString()); 
} 

Visual Studio中明確告訴我這兩個條件都滿足,不管事實,即退出循環,和循環時,他們也是如此。 colorBucket的大小非常龐大,當count通過它本身大約是colorBucket大小的三分之一時,循環就會退出。除此之外,不會拋出任何異常,並且我在catch語句中設置的調試點永遠不會被調用。

編輯:圖像的寬度和高度是844像素,而且,一旦內部代碼被刪除,循環仍然顯示失敗。編輯2:所以我已經想出了一些非常重要的事情,循環實際上並不提前結束,但不知何故,計數器並不等於colorbucket中的顏色數。

+0

您可能在循環中發生異常。將循環包裝在「try/catch」塊中,看看會發生什麼。 – Dai

+0

使用斷點並檢查inputHeight和inputWidth變量,當它碰到你的第一個for循環時。這將告訴你,如果循環過早結束或設置爲78x78,如@dasblinkenlight所述 – BRogers

+0

當循環後面放置斷點時,for循環中的兩個條件都爲真。 inputHeight不是78,也不是輸入寬度,我通過循環近似地執行了20次。另外,視覺工作室告訴我,儘管我們已經離開了循環,條件仍然是正確的。 –

回答

0

嗯,事實證明,這與我將colorBucket的大小乘以此代碼之外的三分之一有關。我明白,如果你發現必要的話來結束這個問題,因爲這是非常具體的這種情況。

3

看來您的inputHeightinputWidth定義不正確。嘗試改變環頭,使用您的inputImage的屬性,就像這樣:

for (int y = 0; y < inputImage.Height; y++) 
{ 
    for (int x = 0; x < inputImage.Width; x++) 
    { 
     ... 
    } 
} 

的另一個問題是你colorBucket數組的大小:你的循環不能運行超過三分之一的大小,組合。例如,如果colorBucket數組的大小爲18252,則循環將在拋出異常之前正確運行78x78次。

+0

inputHeight和inputWidth正是我期望它們在調試模式下進行檢查時的樣子。 –

+0

@DylanKatz它們是否等於'inputImage.Height'和'inputImage.Width'? – dasblinkenlight

+0

是的,是的。 –