C#摄像头采集程序崩溃

时间:2015-07-10 07:09:52

标签: c# visual-studio-2010 camera crash

我正在使用Visual Studio 10开发一个C#库来获取帧并从四个摄像头录制视频。包含库的窗体必须以32位编译(即使最终机器具有Windows 7 64位)。以32位编译库并运行它大约1小时将破坏应用程序,并出现以下错误:

Firma problema:
Nome evento problema:            BEX
Nome applicazione:               S102.exe
Versione applicazione:           1.0.2015.619
Timestamp applicazione:          55963958
Nome modulo con errori:          clr.dll
Versione modulo con errori:      4.0.30319.34209
Timestamp modulo con errori:     5348961e
Offset eccezione:                0000e233
Codice eccezione:                c0000409
Dati eccezione:                  00000000
Versione SO:                     6.1.7601.2.1.0.256.48
ID impostazioni locali:          1040
Informazioni aggiuntive 1:       bae0
Ulteriori informazioni 2:        bae094b824883e215fdbc3ee2b394585
Ulteriori informazioni 3:        4415
Ulteriori informazioni 4:        441563ebf8308b83ce61454e88cff59c

Leggere l'informativa sulla privacy online:
http://go.microsoft.com/fwlink/?linkid=104288&clcid=0x0410

Se l'informativa sulla privacy online non è disponibile, leggere quella offline:
C:\Windows\system32\it-IT\erofflps.txt

我已经做了很多测试来检查问题。到目前为止,我只是在以下条件下连续运行申请超过9小时:

  1. 包含库的Windows表单以64位编译
  2. 应用程序在visual studio下运行(按钮'启动调试F5')无论表单是以32位还是64位编译。
  3. 库被编译为'任何CPU'。我已经多次查看我的代码,以查找是否有内存泄漏或一些错误代码,但我找不到任何内容。我已经两个多星期了解这个问题。你有什么建议吗?非常感谢你!

    更新

    我已从代码中排除了负责部分:

    • 将RAW图像转换为位图
    • 可视化转换的图像
    因此,应用程序从4个摄像头连续抓取RAW图像(没有视觉化)。此代码运行了14个小时而没有崩溃。我可以说问题出在这部分代码中:

    Bitmap bitmap = new Bitmap(grabResult.Width, grabResult.Height,PixelFormat.Format32bppRgb);
    // Lock the bits of the bitmap.
    BitmapData bmpData = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.ReadWrite, bitmap.PixelFormat);
    // Place the pointer to the buffer of the bitmap.
    converter.OutputPixelFormat = PixelType.BGRA8packed;
    IntPtr ptrBmp = bmpData.Scan0;
    converter.Convert(ptrBmp, bmpData.Stride * bitmap.Height, grabResult);   //Exception handling TODO
    bitmap.UnlockBits(bmpData);
    
    // Assign a temporary variable to dispose the bitmap after assigning the new bitmap to the display control.
    Bitmap bitmapOld = pictureBox.Image as Bitmap;
    // Provide the display control with the new bitmap. This action automatically updates the display.
    if(pictureBox!=null) pictureBox.Image = bitmap;
    if (bitmapOld != null)
    {
    // Dispose the bitmap.
    bitmapOld.Dispose();
    }
    

    是否有人在此代码中看到任何可疑内容?谢谢!

0 个答案:

没有答案