Esempio n. 1
0
        public void Capture()
        {
            Focus.StartCapturing();

            if (Focus.IsSubFrameActive)
            {
                var frame = Focus.GetSubFrame();

                CameraService.SetRegion(frame.ChipX1, frame.ChipY1, frame.ChipX2 - frame.ChipX1, frame.ChipY2 - frame.ChipY1);
                Camera.SetRegion(frame.ChipX1, frame.ChipY1, frame.ChipX2 - frame.ChipX1, frame.ChipY2 - frame.ChipY1);
            }
            else
            {
                CameraService.SetRegion(0, 0, Camera.BinnedX, Camera.BinnedY);
                Camera.SetRegion(0, 0, Camera.BinnedX, Camera.BinnedY);
            }

            var task = CameraService.Capture(Focus.Exposure);

            task.ContinueWith(x =>
            {
                if (x.Status == TaskStatus.RanToCompletion)
                {
                    var result = x.Result;

                    var capture = new CaptureView
                    {
                        BinnedX = Camera.BinnedX,
                        BinnedY = Camera.BinnedY,
                        ChipX   = Camera.UnbinnedX,
                        ChipY   = Camera.UnbinnedY,
                        XSize   = result.XSize,
                        YSize   = result.YSize
                    };

                    if (Camera.IsSubFrameActive)
                    {
                        capture.Frame = new SubFrame
                        {
                            ChipX1 = Camera.SubFrameX,
                            ChipY1 = Camera.SubFrameY,
                            ChipX2 = Camera.SubFrameX + Camera.SubFrameWidth,
                            ChipY2 = Camera.SubFrameY + Camera.SubFrameHeight
                        };
                    }

                    capture.ImageArray = result.Image;
                    capture.Image      = new Mat(capture.XSize, capture.YSize, MatType.CV_16UC1, result.Image);

                    Focus.SetCapture(capture);

                    Camera.ChangeActualSize(capture.GetWidth(), capture.GetHeight());

                    if (Focus.IsStarSelected)
                    {
                        SelectStar();
                    }

                    Focus.FrameChanged();

                    if (Focus.IsLoopingCapture)
                    {
                        Capture();
                    }
                    else
                    {
                        Focus.StopCapturing();
                    }
                }
                else
                {
                    Focus.StopCapturing();
                }
            });

            task.Start();
        }