Beispiel #1
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);
        }
Beispiel #2
0
        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");
            }
        }
Beispiel #3
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);
            }
        }
Beispiel #4
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);
        }