GDI+ 中的一般错误

Generic error in GDI+

我正在循环保存来自相机的图像,但有时在我使用 i7 4gb ram 时它会在某些系统中出现 gdi+ 中的一般错误,而当我使用 i3 4gnb ram 系统时它会出现

for (int i = 1; i <= frameno; i++)
{
    Bitmap bm = new Bitmap(1024,1280);
    Int32 s32MemID;
    Camera.Memory.GetActive(out s32MemID);
    Camera.Memory.CopyToBitmap(s32MemID, out bm);
    bm.RotateFlip(RotateFlipType.Rotate90FlipNone);
    String str = "";
    if (i < 10)
    {
        str = "00";
    }
    else if (i < 100)
    {
        str = "0";
    }
    bm.Save(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "\capture" + str + i + ".bmp", ImageFormat.Bmp); 
    Thread.Sleep(delay);
}

请有人给我解决方案,这对我来说非常重要

我想通过一些重构可以使内存更友好,通过使用,例如:

Int32 s32MemID;
Bitmap bm;
string targetPath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
for (int i = 1; i <= frameno; i++)
{
    try
    {
        Camera.Memory.GetActive(out s32MemID);
        Camera.Memory.CopyToBitmap(s32MemID, out bm);
        bm.RotateFlip(RotateFlipType.Rotate90FlipNone);
        bm.Save(Path.Combine(targetPath, "capture" + (i.ToString().PadLeft('0', 3)) + ".bmp"), ImageFormat.Bmp); 
    }
    finally 
    {
        if (bm != null) 
        {
            bm.Dispose();
            bm = null;
        }
    }
    Thread.Sleep(delay);
}

通常我会建议使用模式,但由于您没有显示 Camera.Memory.CopyToBitmap 方法如何处理 out Bitmap 参数,所以很难说应该如何完成,如果它是您自己的库,我不明白你为什么需要 out 参数,因为位图无论如何都会被 Reference 传递)