【问题标题】:Bitmap.GetPixel() returns nothingBitmap.GetPixel() 不返回任何内容
【发布时间】:2011-11-01 05:17:02
【问题描述】:

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

我束手无策,甚至不知道如何开始对此类问题进行故障排除。帮忙?

谢谢:-)

【问题讨论】:

  • 除非必须,否则不要调试发布版本。

标签: c# bitmap system.drawing


【解决方案1】:

您正在调试发布(或其他优化的)构建。这就是charlie 不存在的原因。变量只被赋值,没有被使用。编译器已经对其进行了优化。

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

【讨论】:

  • 谢谢。我昨晚凌晨 2 点构建了一个发布版本,忘记切换回来。
【解决方案2】:

一旦您编写了一些实际使用charlie 的代码,编译器就会停止优化它。

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

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

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

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

【讨论】:

  • 搞错了。感谢您的指点和创意代码:-P
猜你喜欢
  • 1970-01-01
  • 2020-04-27
  • 2019-04-06
  • 2012-02-15
  • 2020-09-07
  • 2021-11-22
  • 2015-11-06
  • 2013-11-14
  • 2014-03-23
相关资源
最近更新 更多