http://blog.csdn.net/zajin/article/details/17021339
介绍佳能EOS数码SDK是一个 可以用来远程控制其数码单反相机相当强大的SDK。不幸的是,想在互联网上找些很好的例子相当难,而且提供的文档也不是很齐全。因为我已经找到了很多能让其他人更容易掌握它的东西,我就想可以把我认为最重要的东西组织在一起,做成一个教程。本教程包括:
还有:我不对这个软件做任何方式担保。使用时请您自己注意风险! (你可以在GPL许可证中找到有关此主题的更多信息。) |
- /// <summary>
- /// The used camera
- /// </summary>
- public Camera MainCamera { get; private set; }
- /// <summary>
- /// States if a session with the MainCamera is opened
- /// </summary>
- public bool CameraSessionOpen { get; private set; }
- /// <summary>
- /// States if the LiveView is on or not
- /// </summary>
- public bool IsLiveViewOn { get; private set; }
- /// <summary>
- /// States if LiveView is recorded or not
- /// </summary>
- public bool IsEvfFilming { get; private set; }
- /// <summary>
- /// Directory to where photos will be saved
- /// </summary>
- public string ImageSaveDirectory { get; set; }
- /// <summary>
- /// Handles errors that happen with the SDK
- /// </summary>
- public uint Error
- {
- get { return EDSDK.EDS_ERR_OK; }
- set { if (value != EDSDK.EDS_ERR_OK) throw new Exception("SDK Error: " + value); }
- }
- /// <summary>
- /// Frame buffer for LiveView recording
- /// </summary>
- private Queue<byte[]> FrameBuffer = new Queue<byte[]>(1000);
- #region SDK Events
- public event EDSDK.EdsCameraAddedHandler SDKCameraAddedEvent;
- public event EDSDK.EdsObjectEventHandler SDKObjectEvent;
- public event EDSDK.EdsProgressCallback SDKProgressCallbackEvent;
- public event EDSDK.EdsPropertyEventHandler SDKPropertyEvent;
- public event EDSDK.EdsStateEventHandler SDKStateEvent;
- #endregion
- #region Custom Events
- public delegate void CameraAddedHandler();
- public delegate void ProgressHandler(int Progress);
- public delegate void ImageUpdate(Image img);
- public delegate void FloatUpdate(float Value);
- /// <summary>
- /// Fires if a camera is added
- /// </summary>
- public event CameraAddedHandler CameraAdded;
- /// <summary>
- /// Fires if any process reports progress
- /// </summary>
- public event ProgressHandler ProgressChanged;
- /// <summary>
- /// Fires if the LiveView image is updated
- /// </summary>
- public event ImageUpdate LiveViewUpdated;
- /// <summary>
- /// Fires if a new framerate is calculated
- /// </summary>
- public event FloatUpdate FrameRateUpdated;
- #endregion
Camera类相当简单,工作起来就像一个相机指针和有关相机的一些信息的容器:
- public class Camera
- {
- internal IntPtr Ref;
- public EDSDK.EdsDeviceInfo Info { get; private set; }
- public uint Error
- {
- get { return EDSDK.EDS_ERR_OK; }
- set { if (value != EDSDK.EDS_ERR_OK) throw new Exception("SDK Error: " + value); }
- }
- public Camera(IntPtr Reference)
- {
- this.Ref = Reference;
- EDSDK.EdsDeviceInfo dinfo;
- Error = EDSDK.EdsGetDeviceInfo(Reference, out dinfo);
- this.Info = dinfo;
- }
- }
CameraValues是一个拥有所有单元ID值以及存储从Av、Tv到ISO字符串值的静态类。
|
- /// <summary>
- /// Initialises the SDK and adds events
- /// </summary>
- public SDKHandler()
- {
- //this is the important part of initialisation
- Error = EDSDK.EdsInitializeSDK();
- //here we subscribe to the CameraAddedEvent and tell the SDK we did so
- CameraAddedEvent += new EDSDK.EdsCameraAddedHandler(SDKHandler_CameraAddedEvent);
- EDSDK.EdsSetCameraAddedHandler(CameraAddedEvent, IntPtr.Zero);
- //here we subscribe to the rest of the camera events
- SDKStateEvent += new EDSDK.EdsStateEventHandler(Camera_SDKStateEvent);
- SDKPropertyEvent +=