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); }
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"); } }
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); } }
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); }