繁体   English   中英

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参数,因此很难说出应该如何做,如果它是您自己的lib,我看不到为什么需要out参数,因为无论如何位图都会通过Reference传递)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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