コード例 #1
0
        private void SetCameraToManual()
        {
            Logger.WriteTraceMessage("Set camera to manual exposure");
            if (Capabilities.ContainsKey(eNkMAIDCapability.kNkMAIDCapability_ExposureMode) && Capabilities[eNkMAIDCapability.kNkMAIDCapability_ExposureMode].CanSet())
            {
                var exposureMode = _camera.GetEnum(eNkMAIDCapability.kNkMAIDCapability_ExposureMode);
                var foundManual  = false;
                for (int i = 0; i < exposureMode.Length; i++)
                {
                    if ((uint)exposureMode[i] == (uint)eNkMAIDExposureMode.kNkMAIDExposureMode_Manual)
                    {
                        exposureMode.Index = i;
                        foundManual        = true;
                        _camera.SetEnum(eNkMAIDCapability.kNkMAIDCapability_ExposureMode, exposureMode);
                        break;
                    }
                }

                if (!foundManual)
                {
                    throw new NikonException("Failed to find the 'Manual' exposure mode");
                }
            }
            else
            {
                Logger.WriteTraceMessage("Cannot set to manual mode. Skipping...");
            }
        }
コード例 #2
0
        void manager_DeviceAdded(NikonManager sender, NikonDevice device)
        {
            camera = device;

            // Set shooting mode to 'continuous, highspeed'
            NikonEnum shootingMode = camera.GetEnum(eNkMAIDCapability.kNkMAIDCapability_ShootingMode);

            shootingMode.Index = (int)eNkMAIDShootingMode.kNkMAIDShootingMode_CH;
            camera.SetEnum(eNkMAIDCapability.kNkMAIDCapability_ShootingMode, shootingMode);
        }
コード例 #3
0
ファイル: Form1.cs プロジェクト: andrewHolsaeter/CameraApp
        void updateCameraData()
        {
            try
            {
                NikonEnum aperture     = device.GetEnum(eNkMAIDCapability.kNkMAIDCapability_Aperture);
                float     exposure     = (float)device.GetFloat(eNkMAIDCapability.kNkMAIDCapability_ExposureStatus);
                NikonEnum shutterspeed = device.GetEnum(eNkMAIDCapability.kNkMAIDCapability_ShutterSpeed);
                int       batterylevel = (int)device.GetInteger(eNkMAIDCapability.kNkMAIDCapability_BatteryLevel);

                progressBar1.Value     = Convert.ToInt32(batterylevel);
                labelBatteryLevel.Text = batterylevel.ToString() + "%";

                textBoxShutterSpeed.Text = shutterspeed.ToString();
                textBoxAperature.Text    = aperture.ToString();
                textBoxEV.Text           = exposure.ToString();
            }
            catch
            {
                // MessageBox.Show("Unable to get data");
            }
        }
コード例 #4
0
        public void Init(NikonDevice cam)
        {
            Logger.WriteTraceMessage("Initializing Nikon camera '" + cam.Name + "'");
            _camera                  = cam;
            _camera.ImageReady      += Camera_ImageReady;
            _camera.CaptureComplete += _camera_CaptureComplete;


            //Set to shoot in RAW
            Logger.WriteTraceMessage("Setting compression to RAW");
            var compression = _camera.GetEnum(eNkMAIDCapability.kNkMAIDCapability_CompressionLevel);

            for (int i = 0; i < compression.Length; i++)
            {
                var val = compression.GetEnumValueByIndex(i);
                if (val.ToString() == "RAW")
                {
                    compression.Index = i;
                    _camera.SetEnum(eNkMAIDCapability.kNkMAIDCapability_CompressionLevel, compression);
                    break;
                }
            }

            //Ensure camera is in Manual mode

            /*var exposureMode = _camera.GetEnum(eNkMAIDCapability.kNkMAIDCapability_ExposureMode);
             * if (exposureMode.Index != (int)eNkMAIDExposureMode.kNkMAIDExposureMode_Manual)
             * {
             *  Logger.WriteTraceMessage("Camera not set to Manual mode. Switching now.");
             *  exposureMode.Index = (int)eNkMAIDExposureMode.kNkMAIDExposureMode_Manual;
             *  _camera.SetEnum(eNkMAIDCapability.kNkMAIDCapability_ExposureMode, exposureMode);
             * }*/
            //Changed to function
            SetCameraToManual();

            GetIsoList();
            GetShutterSpeeds();
            GetCapabilities();


            /* Setting SaveMedia when supported, to save images via SDRAM and not to the internal memory card */
            if (Capabilities.ContainsKey(eNkMAIDCapability.kNkMAIDCapability_SaveMedia) && Capabilities[eNkMAIDCapability.kNkMAIDCapability_SaveMedia].CanSet())
            {
                _camera.SetUnsigned(eNkMAIDCapability.kNkMAIDCapability_SaveMedia, (uint)eNkMAIDSaveMedia.kNkMAIDSaveMedia_SDRAM);
            }
            else
            {
                Logger.WriteTraceMessage("Setting SaveMedia Capability not available. This has to be set manually or is not supported by this model.");
            }
        }
コード例 #5
0
ファイル: NikonCamera.cs プロジェクト: daleghent/NINA
        public void Init(NikonDevice cam)
        {
            Logger.Debug("Initializing Nikon camera");
            _camera                  = cam;
            _camera.ImageReady      += Camera_ImageReady;
            _camera.CaptureComplete += _camera_CaptureComplete;

            GetCapabilities();

            if (Capabilities.TryGetValue(eNkMAIDCapability.kNkMAIDCapability_CompressionLevel, out var compressionCapability))
            {
                if (compressionCapability.CanGet() && compressionCapability.CanSet())
                {
                    //Set to shoot in RAW
                    Logger.Debug("Setting compression to RAW");
                    var compression = _camera.GetEnum(eNkMAIDCapability.kNkMAIDCapability_CompressionLevel);
                    for (int i = 0; i < compression.Length; i++)
                    {
                        var val = compression.GetEnumValueByIndex(i);
                        if (val.ToString() == "RAW")
                        {
                            compression.Index = i;
                            _camera.SetEnum(eNkMAIDCapability.kNkMAIDCapability_CompressionLevel, compression);
                            break;
                        }
                    }
                }
                else
                {
                    Logger.Trace($"Cannot set compression level: CanGet {compressionCapability.CanGet()} - CanSet {compressionCapability.CanSet()}");
                }
            }
            else
            {
                Logger.Trace("Compression Level capability not available");
            }

            GetShutterSpeeds();

            /* Setting SaveMedia when supported, to save images via SDRAM and not to the internal memory card */
            if (Capabilities.ContainsKey(eNkMAIDCapability.kNkMAIDCapability_SaveMedia) && Capabilities[eNkMAIDCapability.kNkMAIDCapability_SaveMedia].CanSet())
            {
                _camera.SetUnsigned(eNkMAIDCapability.kNkMAIDCapability_SaveMedia, (uint)eNkMAIDSaveMedia.kNkMAIDSaveMedia_SDRAM);
            }
            else
            {
                Logger.Trace("Setting SaveMedia Capability not available. This has to be set manually or is not supported by this model.");
            }
        }
コード例 #6
0
        public void Run()
        {
            try
            {
                // Create manager object - make sure you have the correct MD3 file for your Nikon DSLR (see https://sdk.nikonimaging.com/apply/)
                NikonManager manager = new NikonManager("Type0003.md3");

                // Listen for the 'DeviceAdded' event
                manager.DeviceAdded += manager_DeviceAdded;

                // Wait for a device to arrive
                _waitForDevice.WaitOne();

                // Set shooting mode to 'continuous, highspeed'
                NikonEnum shootingMode = _device.GetEnum(eNkMAIDCapability.kNkMAIDCapability_ShootingMode);
                shootingMode.Index = (int)eNkMAIDShootingMode.kNkMAIDShootingMode_CH;
                _device.SetEnum(eNkMAIDCapability.kNkMAIDCapability_ShootingMode, shootingMode);

                // Set number of continuous captures - in this case we want 5
                _device.SetUnsigned(eNkMAIDCapability.kNkMAIDCapability_ContinuousShootingNum, 5);

                // Hook up capture events
                _device.ImageReady      += _device_ImageReady;
                _device.CaptureComplete += _device_CaptureComplete;

                // Capture
                _device.Capture();

                // Wait for the capture to complete
                _waitForCaptureComplete.WaitOne();

                // Shutdown
                manager.Shutdown();
            }
            catch (NikonException ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
コード例 #7
0
        private void BulbCapture(double exposureTime)
        {
            // Lock camera so we can change it to 'manual exposure'
            eNkMAIDCapability lockCameraCap = eNkMAIDCapability.kNkMAIDCapability_LockCamera;

            _camera.SetBoolean(lockCameraCap, true);

            // Set camera to manual exposure
            eNkMAIDCapability exposureModeCap = eNkMAIDCapability.kNkMAIDCapability_ExposureMode;
            NikonEnum         exposureMode    = _camera.GetEnum(exposureModeCap);

            exposureMode.Index = (int)eNkMAIDExposureMode.kNkMAIDExposureMode_Manual;
            _camera.SetEnum(exposureModeCap, exposureMode);

            // Set shutter speed to 'bulb'
            eNkMAIDCapability shutterSpeedCap = eNkMAIDCapability.kNkMAIDCapability_ShutterSpeed;
            NikonEnum         shutterSpeed    = _camera.GetEnum(shutterSpeedCap);

            for (int i = 0; i < shutterSpeed.Length; i++)
            {
                if (shutterSpeed.GetEnumValueByIndex(i).ToString().ToLower() == "bulb")
                {
                    Console.WriteLine("Index " + i.ToString());
                    shutterSpeed.Index = i;
                    _camera.SetEnum(shutterSpeedCap, shutterSpeed);
                    break;
                }
            }

            // Capture - and ignore the 'BulbReleaseBusy' exception. This is expected.
            try
            {
                _camera.Capture();
            }
            catch (NikonException ex)
            {
                if (ex.ErrorCode != eNkMAIDResult.kNkMAIDResult_BulbReleaseBusy)
                {
                    throw;
                }
            }

            // What for 5 seconds - or however long you want to capture
            Thread.Sleep(TimeSpan.FromSeconds(exposureTime));

            // Stop bulb capture (Note: must be compiled with 'unsafe code' enabled)
            NkMAIDTerminateCapture terminate = new NkMAIDTerminateCapture();

            terminate.ulParameter1 = 0;
            terminate.ulParameter2 = 0;
            unsafe
            {
                IntPtr terminate_pointer = new IntPtr(&terminate);

                _camera.Start(
                    eNkMAIDCapability.kNkMAIDCapability_TerminateCapture,
                    eNkMAIDDataType.kNkMAIDDataType_GenericPtr,
                    terminate_pointer);
            }

            // Unlock camera
            _camera.SetBoolean(lockCameraCap, false);
        }
コード例 #8
0
ファイル: NikonController.cs プロジェクト: mcauzzi/Cupola
 public int GetCapabilityIndex(Capability capability)
 {
     return(IsConnected ? dev.GetEnum(capability2Nikon[capability]).Index : throw new Exception("Camera isn't connected"));
 }