예제 #1
0
        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);
        }
예제 #2
0
        /// <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;
                }
            }
        }