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..."); } }
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 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."); } }
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."); } }
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); }
public int GetCapabilityIndex(Capability capability) { return(IsConnected ? dev.GetEnum(capability2Nikon[capability]).Index : throw new Exception("Camera isn't connected")); }