public async void capture(bool get_preview, bool register) { if (get_preview == true) { _camera.GetPreviewBufferArgb(preview_image); } // Take a picture. Flag busy meanwhile. cam_busy = true; // If register mode is enabled, sleep for 500ms. if (register == true) { await System.Threading.Tasks.Task.Delay(500); } await _camsequence.StartCaptureAsync(); cam_busy = false; transmit = true; imstream.Seek(0, SeekOrigin.Begin); }
/// <summary> /// Asynchronously captures a frame for further usage. /// </summary> private async Task CaptureAsync() { if (!_focusing && !_capturing) { _capturing = true; ProgressBar.IsIndeterminate = true; ProgressBar.Visibility = Visibility.Visible; var stream = new MemoryStream(); try { var sequence = _device.CreateCaptureSequence(1); sequence.Frames[0].CaptureStream = stream.AsOutputStream(); await _device.PrepareCaptureSequenceAsync(sequence); // Freeze preview image to avoid viewfinder showing live feed during/after capture var freezeBitmap = new WriteableBitmap((int)_device.PreviewResolution.Width, (int)_device.PreviewResolution.Height); _device.GetPreviewBufferArgb(freezeBitmap.Pixels); freezeBitmap.Invalidate(); FreezeImage.Source = freezeBitmap; FreezeImage.Visibility = Visibility.Visible; await sequence.StartCaptureAsync(); } catch (Exception) { stream.Close(); } ProgressBar.Visibility = Visibility.Collapsed; ProgressBar.IsIndeterminate = false; _capturing = false; if (stream.CanRead) { PhotoModel.Singleton.FromNewImage(stream, PhotoOrigin.Camera); if (_picker) { NavigationService.GoBack(); } else { if (_lens) { NavigationService.Navigate(new Uri("/Pages/MagnifierPage.xaml?editor", UriKind.Relative)); } else { NavigationService.Navigate(new Uri("/Pages/MagnifierPage.xaml", UriKind.Relative)); } } } else { FreezeImage.Visibility = Visibility.Collapsed; FreezeImage.Source = null; } } }