예제 #1
0
 private void DoImage()
 {
     _camera.StartExposure();
     byte[] rawBytePixels = null;
     while (true)
     {
         while (!_camera.GetExposure(ref rawBytePixels))
         {
         }
         var rawShortPixels = new ushort[rawBytePixels.Length / 2];
         Buffer.BlockCopy(rawBytePixels, 0, rawShortPixels, 0, rawBytePixels.Length);
         if (_save > 0)
         {
             _save--;
             SaveImage(rawShortPixels, _camera.Width, _camera.Height);
         }
         if (_solveTask != null && (_solveTask.IsCompleted || _solveTask.IsFaulted || _solveTask.IsCanceled))
         {
             _solveTask.Wait();
             _solveTask = null;
         }
         if (_solve && _solveTask == null)
         {
             _solve     = false;
             _solveTask = DoSolve(rawShortPixels, _camera.Width, _camera.Height);
         }
         var pixels = ProcessImage(rawShortPixels);
         try
         {
             _form.BeginInvoke((Action)(() =>
             {
                 var locked = _bitmap.LockBits(new Rectangle(0, 0, _bitmap.Width, _bitmap.Height), ImageLockMode.WriteOnly, PixelFormat.Format32bppRgb);
                 Marshal.Copy(pixels, 0, locked.Scan0, locked.Width * locked.Height);
                 _bitmap.UnlockBits(locked);
                 _form.Invalidate();
             }));
         }
         catch
         {
             // form is closed
             break;
         }
     }
     _camera.StopExposure();
 }