佳能相机操作 EDSDK 教程 C# 版本

本文档介绍了如何使用C#与佳能EDSDK进行交互,包括获取连接的相机列表、打开和关闭相机会话、拍摄图片、开启和关闭实时预览、记录视频以及设置和获取相机参数。提供了详细的代码示例,适用于开发基于佳能相机的图像处理应用。
摘要由CSDN通过智能技术生成
http://blog.csdn.net/zajin/article/details/17021339 
 

介绍

佳能EOS数码SDK是一个 可以用来远程控制其数码单反相机相当强大的SDK。不幸的是,想在互联网上找些很好的例子相当难,而且提供的文档也不是很齐全。因为我已经找到了很多能让其他人更容易掌握它的东西,我就想可以把我认为最重要的东西组织在一起,做成一个教程。 
本教程包括: 
  • 初始化和终止的SDK
  • 打开和关闭摄像头会话
  • 获取连接的像机列表
  • set和get相机设置
  • 获取可用的设置列表
  • 正常拍照和使用闪光灯模式
  • 处理相机事件
  • 将拍摄的照片下载到电脑上
  • 启动和实时查看
  • 记录实时查看
  • 锁定/解锁相机的用户界面
另外:其实我不从属于佳能公司,也不受其自助。 
还有:我不对这个软件做任何方式担保。使用时请您自己注意风险! (你可以在GPL许可证中找到有关此主题的更多信息。) 

背景

你必须有佳能EDSDK副本才能让这个运行起来。 (我认为)我不会被允许包含那些官方的DLL的到项目中,所以你必须自己通过申请去获取,它们在这里:

一旦你得到了那些DLL,就把它们放到项目中的 EDSDK文件夹里面,并确保再调试/发行目录中也要有相同的文件夹。 (或你认为的任何地方,同时据此调整 EDSDK.cs文件中的DLLPath变量(在右上部)。 

使用代码

我使用了三个简单的类,SDKHandler,Camera和CameraValues,还有来自 佳能SDK的EDSDK。 

在SDKHandler中有几个变量:

[csharp]  view plain copy 在CODE上查看代码片 派生到我的代码片
 
  1. /// <summary>  
  2. /// The used camera  
  3. /// </summary>  
  4. public Camera MainCamera { get; private set; }  
  5.   
  6. /// <summary>  
  7. /// States if a session with the MainCamera is opened  
  8. /// </summary>  
  9. public bool CameraSessionOpen { get; private set; }  
  10.   
  11. /// <summary>  
  12. /// States if the LiveView is on or not  
  13. /// </summary>  
  14. public bool IsLiveViewOn { get; private set; }  
  15.   
  16. /// <summary>  
  17. /// States if LiveView is recorded or not  
  18. /// </summary>  
  19. public bool IsEvfFilming { get; private set; }  
  20.   
  21. /// <summary>  
  22. /// Directory to where photos will be saved  
  23. /// </summary>  
  24. public string ImageSaveDirectory { get; set; }  
  25.   
  26. /// <summary>  
  27. /// Handles errors that happen with the SDK  
  28. /// </summary>  
  29. public uint Error  
  30. {  
  31.     get { return EDSDK.EDS_ERR_OK; }  
  32.     set { if (value != EDSDK.EDS_ERR_OK) throw new Exception("SDK Error: " + value); }  
  33. }  
  34.   
  35. /// <summary>  
  36. /// Frame buffer for LiveView recording  
  37. /// </summary>  
  38. private Queue<byte[]> FrameBuffer = new Queue<byte[]>(1000);  
还有一些来自SDK的以及我自己添加的一些事件:
[csharp]  view plain copy 在CODE上查看代码片 派生到我的代码片
 
  1. #region SDK Events  
  2.   
  3. public event EDSDK.EdsCameraAddedHandler SDKCameraAddedEvent;  
  4. public event EDSDK.EdsObjectEventHandler SDKObjectEvent;  
  5. public event EDSDK.EdsProgressCallback SDKProgressCallbackEvent;  
  6. public event EDSDK.EdsPropertyEventHandler SDKPropertyEvent;  
  7. public event EDSDK.EdsStateEventHandler SDKStateEvent;  
  8.  
  9. #endregion  
  10.  
  11. #region Custom Events  
  12.   
  13. public delegate void CameraAddedHandler();  
  14. public delegate void ProgressHandler(int Progress);  
  15. public delegate void ImageUpdate(Image img);  
  16. public delegate void FloatUpdate(float Value);  
  17.   
  18. /// <summary>  
  19. /// Fires if a camera is added  
  20. /// </summary>  
  21. public event CameraAddedHandler CameraAdded;  
  22.   
  23. /// <summary>  
  24. /// Fires if any process reports progress  
  25. /// </summary>  
  26. public event ProgressHandler ProgressChanged;  
  27.   
  28. /// <summary>  
  29. /// Fires if the LiveView image is updated  
  30. /// </summary>  
  31. public event ImageUpdate LiveViewUpdated;  
  32.   
  33. /// <summary>  
  34. /// Fires if a new framerate is calculated  
  35. /// </summary>  
  36. public event FloatUpdate FrameRateUpdated;  
  37.  
  38. #endregion    
这个类的方法将在稍后讨论。

 

Camera类相当简单,工作起来就像一个相机指针和有关相机的一些信息的容器:

[csharp]  view plain copy 在CODE上查看代码片 派生到我的代码片
 
  1. public class Camera  
  2. {  
  3.     internal IntPtr Ref;  
  4.     public EDSDK.EdsDeviceInfo Info { get; private set; }  
  5.     public uint Error  
  6.     {  
  7.         get { return EDSDK.EDS_ERR_OK; }  
  8.         set { if (value != EDSDK.EDS_ERR_OK) throw new Exception("SDK Error: " + value); }  
  9.     }  
  10.   
  11.     public Camera(IntPtr Reference)  
  12.     {  
  13.         this.Ref = Reference;          
  14.         EDSDK.EdsDeviceInfo dinfo;  
  15.         Error = EDSDK.EdsGetDeviceInfo(Reference, out dinfo);  
  16.         this.Info = dinfo;  
  17.     }  
  18. }   
CameraValues是一个拥有所有单元ID值以及存储从Av、Tv到ISO字符串值的静态类。

初始化和终止SDK

初始化和终止是最容易做的事情。当您一启动程序,就创建了一个SDKHandler的新实例。

[csharp]  view plain copy 在CODE上查看代码片 派生到我的代码片
 
  1. /// <summary>  
  2. /// Initialises the SDK and adds events  
  3. /// </summary>  
  4. public SDKHandler()  
  5. {  
  6.     //this is the important part of initialisation  
  7.     Error = EDSDK.EdsInitializeSDK();   
  8.   
  9.     //here we subscribe to the CameraAddedEvent and tell the SDK we did so  
  10.     CameraAddedEvent += new EDSDK.EdsCameraAddedHandler(SDKHandler_CameraAddedEvent);  
  11.     EDSDK.EdsSetCameraAddedHandler(CameraAddedEvent, IntPtr.Zero);  
  12.       
  13.     //here we subscribe to the rest of the camera events  
  14.     SDKStateEvent += new EDSDK.EdsStateEventHandler(Camera_SDKStateEvent);  
  15.     SDKPropertyEvent += 
Canon EDSDK C#是一个可以用来远程控制佳能数码单反相机的强大SDK。它提供了一些相机类和函数,可以帮助开发人员实现与相机的交互。Camera类是一个简单的容器,包含了相机指针和有关相机的一些信息。CameraValues是一个静态类,包含了所有单元ID值以及存储从Av、Tv到ISO字符串值的信息。SDKHandler是一个处理相机SDK函数的类,可以调用takephoto函数来拍照。\[1\]\[2\] 关于Canon EDSDK C#的更多信息和使用教程,你可以参考这篇博客文章:http://blog.csdn.net/zajin/article/details/17021339。这篇文章介绍了如何初始化和终止SDK、打开和关闭摄像头会话、获取连接的相机列表、设置和获取相机设置、获取可用的设置列表、正常拍照和使用闪光灯模式、处理相机事件、将拍摄的照片下载到电脑上等等。请注意,这个SDK是根据GPL许可证发布的,使用时请自行注意风险。\[3\] #### 引用[.reference_title] - *1* *3* [佳能相机操作 EDSDK 教程 C# 版本](https://blog.csdn.net/weixin_30815427/article/details/95392030)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [佳能相机的拍照应用开发canon EDSDK C#](https://blog.csdn.net/u014528558/article/details/48807515)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值