Bitmap.GetPixel()什么都不返回

时间:2011-10-31 21:05:32

标签: c# bitmap system.drawing

正如标题所说,调用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窗口中不存在。如果我断开了声明或它分配值的行,断点将被命中并且似乎在运行。

我的智慧结束了,并且不知道如何开始排除故障。帮助

谢谢: - )

2 个答案:

答案 0 :(得分:3)

您正在调试版本(或其他优化的)版本。这就是charlie不存在的原因。该变量仅被分配,而不是以其他方式使用。编译器对其进行了优化。

编辑:您可以通过使用Debug构建来防止这种情况,或者像David Heffernan所说,通过使用charlie做一些有意义的事情来阻止这种情况。

答案 1 :(得分:3)

一旦你编写了一些实际上与charlie做某事的代码,编译器就会停止对它进行优化。

例如,如果你有一个名为snort(Color color)的函数,那么写:

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

(可能)足以迫使编译器不要优化charlie

当然,您可能正在调试启用了优化的发布版本。您应该更改项目设置,以便在构建调试时禁用优化。当你这样做时,你不需要采用技巧来击败优化器。或许你只是错误地调试版本构建 - 你得到我信任的想法。