繁体   English   中英

Bitmap.GetPixel()不返回任何内容

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM