我正在使用我在Github上找到的repo,当我尝试运行它时,我在以下函数中得到一个异常:
public Color GetPixelColor(Point pos)
{
Color pixelColor = new Color();
Bitmap image = new Bitmap(1, 1);
RECT rc;
GetWindowRect(process, out rc);
Bitmap bmp = new Bitmap(rc.Width, rc.Height, PixelFormat.Format32bppArgb);
Graphics gfxBmp = Graphics.FromImage(bmp);
IntPtr hdcBitmap = gfxBmp.GetHdc();
PrintWindow(process, hdcBitmap, 0);
gfxBmp.ReleaseHdc(hdcBitmap);
gfxBmp.Dispose();
image = bmp.Clone(new Rectangle(pos.X, pos.Y, 1, 1), PixelFormat.Format32bppArgb);
pixelColor = image.GetPixel(0, 0);
return pixelColor;
}
问题在于:
image = bmp.Clone(new Rectangle(pos.X, pos.Y, 1, 1), PixelFormat.Format32bppArgb);
问题是我有两个显示器吗?有什么建议吗?
编辑:我已经将项目设置为显式构建x64,并且我有足够的系统内存。
编辑2:找到问题的根源。
有一种名为Unzoom()
while(!ColorDif.isCorrect(Home.bsProcess.image.GetPixelColor(new Point(3 + Settings.xDif,25 + Settings.yDif)), Color.FromArgb(0, 0, 0)))
设置(传递给上述代码的内容)
public static int xDif = 0, yDif = 0;
在运行时,在以下情况下抛出异常: xDif = -282 yDif = -45
答案 0 :(得分:2)
Bitmap是Win32 GDI方法的包装器。这些方法的错误代码有时会被混淆地转换为.NET异常。因此,您可能没有OOM,而是其他一些GDI错误。
GDI有许多规则,WPF不是这种规则,可能会导致这样的错误。例如,元素的像素尺寸必须至少为1x1。此外,任何坐标和大小都必须有效。可能你的错误与那里的错误有关。
答案 1 :(得分:0)
您应该处理您创建的图像。如果你不这样做,你将得到OutOfMemoryException。