2016-08-30 5 views
0

私はウェブカメラとフレームを処理する複数のスレッドからフレームを取得するメインクラスを持っています。私はカムからフレームをつかむメインクラスの部分をロックしているので、1つのスレッドだけが同じフレームを処理できます。今私は外部例外を取得していると私は理由を知らない。 私のメインクラス:キャプチャで複数のスレッドを取得しようとしています.QueryFrame()

public Image<Bgr, byte> GetImage() 
{ 
    Image<Bgr, byte> returnable; 
    Mat f = null; 
    lock (locker) 
    { 
     do 
     { 
      f = capture.QueryFrame(); 
     } while (!capture.Grab()); 
     returnable = f.ToImage<Bgr, byte>(); 
    } 
    return returnable; 
} 

マイスレッド:

Image<Bgr,byte> image; 
image = o.GetImage(); //o is the main class 
Image imag = image.ToBitmap(); 
string savePath = path + rofNumber + "/Original.jpg"; 
imag.Save(savePath); //Exception is on this line 
toFind = o.GetNumbersFromDatabase(); 
labels = FindLabels(image); 

例外:

System.Runtime.InteropServices.ExternalException was unhandled 
ErrorCode=-2147467259 
HResult=-2147467259 
Message=Er is een algemene fout opgetreden in GDI+. 
Source=System.Drawing 
StackTrace: 
    bij System.Drawing.Image.Save(String filename, ImageCodecInfo encoder, EncoderParameters encoderParams) 
    bij OCR.Worker.Run() in C:\Users\...\Code\Visual Studio\OCR\OCR\Worker.cs:regel 178 
    bij System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 
    bij System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 
    bij System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 
    bij System.Threading.ThreadHelper.ThreadStart() 
InnerException: 

答えて

0

私は問題を自分で発見しました。 私は複数のスレッドで作業しているので、画像の保存にはもっと慎重だったはずです。

問題は、スレッドの1つがイメージを保存していて、終了する前に別のスレッドが同じファイルに保存を開始したためにエラーが発生したことです。

私がこれを最初に試したのは、カメラのフィードのちょっとしたスライドショーを得るためです。

結論:

私は、画像を保存するためのスレッドごとに異なる名前を使用しました!

私はこの問題を自分で解決しましたが、私は複数のスレッドで真に慎重である必要があることを学びました...

関連する問題