[英]Bitmap.GetPixel() returns nothing
如标题所示,调用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窗口中不存在。 如果我在声明或其分配值的行中设置断点,则该断点将被命中并似乎正在运行。
我精打细算,甚至不知道如何开始对此类问题进行故障排除。 救命?
谢谢 :-)
您正在调试发行版(或其他经过优化的)版本。 这就是为什么charlie
不存在的原因。 该变量仅已分配,未另外使用。 编译器已经对其进行了优化。
编辑:您可以通过使用Debug构建来防止这种情况,或者正如David Heffernan所说,对charlie
做一些有意义的事情。
一旦编写了一些实际上可以对charlie
某些操作的代码,编译器就会停止对其进行优化。
例如,如果您有一个名为snort(Color color)
的函数,则编写:
charlie = b.GetPixel(65, 41);
snort(charlie);
(可能)足以迫使编译器不优化charlie
。
当然,您可能正在调试启用了优化的发行版本。 您应该更改项目设置,以便在构建调试时禁用优化。 当您这样做时,您无需采取任何技巧来击败优化器。 或者,也许您只是在错误地调试发行版,您会得到我信任的想法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.