内存不足异常-位图.克隆
本文关键字:克隆 -位图 异常 内存不足 | 更新日期: 2023-09-27 17:53:53
我正在使用我在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)))
Settings(传递给上面代码的内容)
public static int xDif = 0, yDif = 0;
在运行时,当:xDif = -282yDif = -45
Bitmap是Win32 GDI方法的包装器。来自这些方法的错误代码有时会有些令人困惑地转换成。net异常。因此,您可能没有OOM,而是其他一些GDI错误。
GDI有许多规则,这些规则与WPF不同,并且可能导致这样的错误。例如,元素的像素尺寸必须至少为1x1。此外,任何坐标和大小都必须是有效的。可能你的错误与这里的错误有关
您应该处理您创建的图像。如果您不这样做,您将得到OutOfMemoryException。