private void SetCameraSettings(AEMode aeMode, WhiteBalance balance, ApertureValue apertureValue,
                                CameraISOSensitivity cameraIsoSensitivity, ShutterSpeed shutterSpeed)
 {
     //_imageProcessor.SetSetting((uint)PropertyId.AEMode, (uint)aeMode); TODO Не поддерживается Eos 1100
     _imageProcessor.SetSetting((uint)PropertyId.WhiteBalance, (uint)balance);
     _imageProcessor.SetSetting((uint)PropertyId.Av, (uint)apertureValue);
     //_imageProcessor.SetSetting((uint)PropertyId.ExposureCompensation, (uint)));
     _imageProcessor.SetSetting((uint)PropertyId.ISOSpeed, (uint)cameraIsoSensitivity);
     _imageProcessor.SetSetting((uint)PropertyId.Tv, (uint)shutterSpeed);
 }
        public virtual async Task<CompositionProcessingResult> TakePictureAsync(byte[] liveViewImageStream, AEMode selectedAeMode, ApertureValue selectedAvValue, CameraISOSensitivity selectedIsoSensitivity, ShutterSpeed selectedShutterSpeed, WhiteBalance selectedWhiteBalance, CancellationToken token)
        {
            Size liveViewImageStreamSize;
            using (var stream = new MemoryStream(liveViewImageStream))
            {
                    var img = Image.FromStream(stream);
                    liveViewImageStreamSize = img.Size;
            }

            return new CompositionProcessingResult(_pattern, await TakePictureInternal(liveViewImageStreamSize, selectedAeMode, selectedAvValue, selectedIsoSensitivity, selectedShutterSpeed, selectedWhiteBalance, token));
        }
        public async Task CamerAESetEvent()
        {
            AEMode mode = AEMode.FullAuto;

            camera.AEChanged += (s, e) => { Console.WriteLine("AE changes: {0}", e.EventData); };
            camera.AE         = AEMode.GainAuto;
            using (var monitoredSubject = camera.Monitor())
            {
                // Respond Completion
                visca.ProcessIncomingData(new byte[] { 0x90, 0x50, 0xFF });
                await Task.Delay(100);

                //monitoredSubject.Should().Raise("MemoryRecallComplete").WithSender(camera).WithArgs<ViscaCamera.GenericEventArgs<byte>>(args => args.EventData == 1);
                camera.AE.Should().Be(AEMode.GainAuto);
            }
        }
        private async Task <byte[]> Run(Size liveViewImageStreamSize, AEMode selectedAeMode, ApertureValue selectedAvValue, CameraISOSensitivity selectedIsoSensitivity, ShutterSpeed selectedShutterSpeed, WhiteBalance selectedWhiteBalance, CancellationToken token)
        {
            var settings = GetCameraPhotoSettings();

            var pictures = new List <byte[]>();

            for (var i = 0; i < _pattern.Images.Count; i++)
            {
                token.ThrowIfCancellationRequested();
                RaiseImageNumberChanged(i + 1);
                RaiseTimerElapsed(4);
                await Task.Delay(TimeSpan.FromSeconds(2), token);

                for (var j = 3; j >= 0; j--)
                {
                    RaiseTimerElapsed(j);
                    await Task.Delay(TimeSpan.FromSeconds(1), token);
                }

                SetCameraSettings(Enum.Parse(typeof(AEMode), settings.SelectedAeMode),
                                  Enum.Parse(typeof(WhiteBalance), settings.SelectedWhiteBalance),
                                  Enum.Parse(typeof(ApertureValue), settings.SelectedAvValue),
                                  Enum.Parse(typeof(CameraISOSensitivity), settings.SelectedIsoSensitivity),
                                  Enum.Parse(typeof(ShutterSpeed), settings.SelectedShutterSpeed));
                //await Task.Delay(TimeSpan.FromSeconds(1));

                //RaiseImageNumberChanged(i + 1);
                //await Task.Delay(TimeSpan.FromSeconds(1), token);
                token.ThrowIfCancellationRequested();
                var picture = await _imageProcessor.DoTakePicture();

                pictures.Add(picture);

                token.ThrowIfCancellationRequested();
                //await Task.Delay(TimeSpan.FromSeconds(3), token); //todo

                SetCameraSettings(selectedAeMode, selectedWhiteBalance,
                                  selectedAvValue, selectedIsoSensitivity,
                                  selectedShutterSpeed);
                StopLiveView();
                StartLiveView();
            }

            var result = _imageUtils.ProcessImages(pictures, liveViewImageStreamSize, _pattern);

            return(result);
        }
        private async Task<byte[]> Run(Size liveViewImageStreamSize, AEMode selectedAeMode, ApertureValue selectedAvValue, CameraISOSensitivity selectedIsoSensitivity, ShutterSpeed selectedShutterSpeed, WhiteBalance selectedWhiteBalance, CancellationToken token)
        {

            var settings = GetCameraPhotoSettings();

            List<byte[]> pictures = new List<byte[]>();

            for (int i = 0; i < _pattern.Images.Count; i++)
            {
                token.ThrowIfCancellationRequested();
                RaiseImageNumberChanged(i + 1);
                RaiseTimerElapsed(4);
                await Task.Delay(TimeSpan.FromSeconds(2), token);

                for (int j = 3; j >= 0; j--)
                {
                    RaiseTimerElapsed(j);
                    await Task.Delay(TimeSpan.FromSeconds(1), token);
                }

                SetCameraSettings(Enum.Parse(typeof(AEMode), settings.SelectedAeMode),
                    Enum.Parse(typeof(WhiteBalance), settings.SelectedWhiteBalance),
                    Enum.Parse(typeof(ApertureValue), settings.SelectedAvValue),
                    Enum.Parse(typeof(CameraISOSensitivity), settings.SelectedIsoSensitivity),
                    Enum.Parse(typeof(ShutterSpeed), settings.SelectedShutterSpeed));
                //await Task.Delay(TimeSpan.FromSeconds(1));

                //RaiseImageNumberChanged(i + 1);
               // await Task.Delay(TimeSpan.FromSeconds(1), token);
                token.ThrowIfCancellationRequested();
                byte[] picture = await _imageProcessor.DoTakePicture();
                pictures.Add(picture);

                token.ThrowIfCancellationRequested();
               // await Task.Delay(TimeSpan.FromSeconds(3), token); //todo

                SetCameraSettings(selectedAeMode, selectedWhiteBalance,
                    selectedAvValue, selectedIsoSensitivity,
                    selectedShutterSpeed);
                StopLiveView();
                StartLiveView();
            }

            byte[] result = _imageUtils.ProcessImages(pictures, liveViewImageStreamSize, _pattern);
            return result;
        }
        private void SetupSavedCameraSettings()
        {
            var settings = _settingsProvider.GetCameraSettings();

            if (settings == null)
            {
                SelectedAeMode         = AEModeValues.First().Key;
                SelectedAvValue        = AvValues.First().Key;
                SelectedCompensation   = ExposureValues.First().Key;
                SelectedIsoSensitivity = ISOValues.First().Key;
                SelectedShutterSpeed   = ShutterSpeedValues.First().Key;
                SelectedWhiteBalance   = WhiteBalanceValues.First().Key;

                SelectedPhotoAeMode         = AEModeValues.First().Key;
                SelectedPhotoAvValue        = AvValues.First().Key;
                SelectedPhotoCompensation   = ExposureValues.First().Key;
                SelectedPhotoIsoSensitivity = ISOValues.First().Key;
                SelectedPhotoShutterSpeed   = ShutterSpeedValues.First().Key;
                SelectedPhotoWhiteBalance   = WhiteBalanceValues.First().Key;
                return;
            }

            SelectedAeMode         = settings.SelectedAeMode;
            SelectedAvValue        = settings.SelectedAvValue;
            SelectedCompensation   = settings.SelectedCompensation;
            SelectedIsoSensitivity = settings.SelectedIsoSensitivity;
            SelectedShutterSpeed   = settings.SelectedShutterSpeed;
            SelectedWhiteBalance   = settings.SelectedWhiteBalance;

            SelectedPhotoAeMode         = settings.SelectedPhotoAeMode;
            SelectedPhotoAvValue        = settings.SelectedPhotoAvValue;
            SelectedPhotoCompensation   = settings.SelectedPhotoCompensation;
            SelectedPhotoIsoSensitivity = settings.SelectedPhotoIsoSensitivity;
            SelectedPhotoShutterSpeed   = settings.SelectedPhotoShutterSpeed;
            SelectedPhotoWhiteBalance   = settings.SelectedPhotoWhiteBalance;

            #region Костыль, если не поменять свойство выдержки на рядом стоящие значения, то смена остальных свойств не будет сразу применяться в LiveView
            SelectedShutterSpeed = settings.SelectedShutterSpeed.GetNextEnumValue();
            SelectedShutterSpeed = settings.SelectedShutterSpeed.GetNextEnumValue();
            SelectedShutterSpeed = settings.SelectedShutterSpeed;
            #endregion
        }
 protected async Task<byte[]> TakePictureInternal(Size liveViewImageStreamSize, AEMode selectedAeMode, ApertureValue selectedAvValue, CameraISOSensitivity selectedIsoSensitivity, ShutterSpeed selectedShutterSpeed, WhiteBalance selectedWhiteBalance, CancellationToken token)
 {
     return await Task.Run(() => Run(liveViewImageStreamSize, selectedAeMode, selectedAvValue, selectedIsoSensitivity, selectedShutterSpeed, selectedWhiteBalance, token), token);
 }
 private void SetCameraSettings(AEMode aeMode, WhiteBalance balance, ApertureValue apertureValue,
     CameraISOSensitivity cameraIsoSensitivity, ShutterSpeed shutterSpeed)
 {
     _imageProcessor.SetSetting((uint)PropertyId.AEMode, (uint)aeMode);
     _imageProcessor.SetSetting((uint)PropertyId.WhiteBalance, (uint)balance);
     _imageProcessor.SetSetting((uint)PropertyId.Av, (uint)apertureValue);
     //_imageProcessor.SetSetting((uint)PropertyId.ExposureCompensation, (uint)));
     _imageProcessor.SetSetting((uint)PropertyId.ISOSpeed, (uint)cameraIsoSensitivity);
     _imageProcessor.SetSetting((uint)PropertyId.Tv, (uint)shutterSpeed);
 }
 protected async Task <byte[]> TakePictureInternal(Size liveViewImageStreamSize, AEMode selectedAeMode, ApertureValue selectedAvValue, CameraISOSensitivity selectedIsoSensitivity, ShutterSpeed selectedShutterSpeed, WhiteBalance selectedWhiteBalance, CancellationToken token)
 {
     return(await Task.Run(() => Run(liveViewImageStreamSize, selectedAeMode, selectedAvValue, selectedIsoSensitivity, selectedShutterSpeed, selectedWhiteBalance, token), token));
 }
        public virtual async Task <CompositionProcessingResult> TakePictureAsync(byte[] liveViewImageStream, AEMode selectedAeMode, ApertureValue selectedAvValue, CameraISOSensitivity selectedIsoSensitivity, ShutterSpeed selectedShutterSpeed, WhiteBalance selectedWhiteBalance, CancellationToken token)
        {
            Size liveViewImageStreamSize;

            using (var stream = new MemoryStream(liveViewImageStream))
            {
                var img = Image.FromStream(stream);
                liveViewImageStreamSize = img.Size;
            }

            return(new CompositionProcessingResult(_pattern, await TakePictureInternal(liveViewImageStreamSize, selectedAeMode, selectedAvValue, selectedIsoSensitivity, selectedShutterSpeed, selectedWhiteBalance, token)));
        }