正如标题所说,调用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;
}
}
}
当我断开代码时,我得到以下内容:
我在screenCapture中有一个有效的图像。
b中包含有效图像。
查理没有任何价值。当我将它添加到监视列表时,它告诉我当前上下文中不存在charlie,并且该变量在Locals窗口中不存在。如果我断开了声明或它分配值的行,断点将被命中并且似乎在运行。我的智慧结束了,并且不知道如何开始排除故障。帮助
谢谢: - )
答案 0 :(得分:3)
您正在调试版本(或其他优化的)版本。这就是charlie
不存在的原因。该变量仅被分配,而不是以其他方式使用。编译器对其进行了优化。
编辑:您可以通过使用Debug构建来防止这种情况,或者像David Heffernan所说,通过使用charlie
做一些有意义的事情来阻止这种情况。
答案 1 :(得分:3)
一旦你编写了一些实际上与charlie
做某事的代码,编译器就会停止对它进行优化。
例如,如果你有一个名为snort(Color color)
的函数,那么写:
charlie = b.GetPixel(65, 41);
snort(charlie);
(可能)足以迫使编译器不要优化charlie
。
当然,您可能正在调试启用了优化的发布版本。您应该更改项目设置,以便在构建调试时禁用优化。当你这样做时,你不需要采用技巧来击败优化器。或许你只是错误地调试版本构建 - 你得到我信任的想法。