2011-10-31 65 views
2

如標題所示,調用Bitmap.GetPixel不會產生任何結果。沒有賦值給變量,沒有拋出異常。Bitmap.GetPixel()不返回

這裏是我的測試代碼:

private void frmStatTracker_Load(object sender, EventArgs e) 
    { 
     ScreenCapture sc = new ScreenCapture(); 
     Color charlie = new Color(); 
     foreach (Process p in Process.GetProcesses()) 
     { 
      if (p.MainWindowTitle.Contains("DM -")) 
      { 
       sc.CaptureWindowToFile(p.MainWindowHandle, "C:\\test.png", System.Drawing.Imaging.ImageFormat.Png); 
       Image i = sc.CaptureWindow(p.MainWindowHandle); 
       Bitmap b = new Bitmap(i); 
       pictureBox1.Image = b; 

       charlie = b.GetPixel(65, 41); 
       return; 
      } 
     } 
    } 

當我斷點的代碼,我得到如下:

我已經從抓屏在一個有效的圖像。

b在其中有一個有效的圖像。

查理是沒有價值。當我將它添加到監視列表中時,它告訴我charlie不存在於當前上下文中,並且該變量不存在於Locals窗口中。如果我斷言了聲明或者它賦值的那一行,那麼斷點將會被觸發並且似乎在運行。

我在我的智慧結局,並不知道如何開始排除故障。幫幫我?

感謝:-)

+0

除非必須,否則不要調試發佈版本。 –

回答

3

您正在調試版本(或其他優化)的版本。這就是爲什麼charlie不存在。該變量只被賦值,沒有被使用。編譯器已經優化了它。

編輯:您可以通過使用調試版本來防止這種情況,或者像David Heffernan所說的那樣,通過charlie做一些有意義的事情。

+0

謝謝。我昨天凌晨2點建立了一個發佈版本,並忘記將其切換回來。 – HeWhoWas

3

只要你編寫了一些代碼實際上對charlie做了些什麼,編譯器就會停止優化它。

舉例來說,如果你有一個名爲snort(Color color)功能,然後寫:

charlie = b.GetPixel(65, 41); 
snort(charlie); 

就(可能)有足夠的強制編譯器不優化charlie了。

當然,您可能正在調試啓用優化的發佈版本。您應該更改項目設置,以便在構建調試時禁用優化。當你這樣做時,你將不需要訴諸技巧來擊敗優化器。或者也許你只是在錯誤地調試發佈版本 - 你會得到我信任的想法。

+1

這是錯誤的。感謝您的指針和廣告代碼:-P – HeWhoWas