佳能单反SDK 步骤

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 18:03   598   0

EdsInitializeSDK();

EdsGetCameraList(&eclr);//获取相机列表

EdsGetChildCount(eclr, &camCount); //获取相机数量

edsError = EdsGetChildAtIndex(eclr, 0, &camera); //获取相机句柄,存储在camera里

EdsSetCameraStateEventHandler(camera, kEdsStateEvent_All, handleSateEvent, NULL); //设置处理相机“状态”事件的函数

EdsSetObjectEventHandler(camera, kEdsObjectEvent_All, handleObjectEvent, NULL); //设置处理相机 事件的函数

EdsOpenSession(camera); //打开相机会话

EdsGetDeviceInfo(camera, &outDeviceInfo); //获取相机设备信息 outDeviceInfo

EdsSetPropertyData(camera, kEdsPropID_SaveTo, 0, sizeof(EdsUInt32), &saveTo); //设置相机照片存储路径

      EdsCapacity capacity = { 0x7FFFFFFF, 0x1000, 1 };
EdsSetCapacity(camera, capacity); //设置相机属性

EdsSendCommand(camera, kEdsCameraCommand_TakePicture, 0); //发送拍照指令

EdsCloseSession(camera);//关闭相机会话 和Open对应

EdsTerminateSDK 释放SDK 一般最后做

EdsRetain(object);//增加现有对象的引用计数器

事件捕获:

kEdsStateEvent_CaptureError

kEdsStateEvent_JobStatusChanged

一些常见错误:

疑难:

state event 错误: OX311不知道是啥 出现这个stat的时候, take picture 一般是0X81 0X311是和相机失去连接了,需要重新拔插数据线?

EdsError 错误 : EDS_ERR_DEVICE_BUSY 0X81发生在 EdsSetPropertyData 估计是哪里没有释放造成的?

回调函数无法调用解决: ---- 好像下面方法也无法解决 麻蛋。。

If you're using the EDSDK on Windows, you have to have a Windows message loop in your main thread, otherwise callbacks won't happen. (This is because the EDSDK uses the obsolete COM STA threading model instead of real threads.)

   while(GetMessage(&msg, NULL, NULL, NULL))
    {        
        TranslateMessage(&msg); 
        DispatchMessage(&msg); 
    }

bool bPhotoTaken = false; main() { // Initialize EDSDK, start session with camera, change SaveTo property // register ObjectEventHandler // send kEdsCameraCommand_TakePicture while((bRet = GetMessage(&msg, NULL, 0, 0)) != 0) { if(bRet == -1 || bPhotoTaken) { break; } else { TranslateMessage(&msg); DispatchMessage(&msg); } } // Cleanup EDSDK }








handlePropertyEvent :

0X101 kEdsPropertyEvent_PropertyChanged - 这个参数说明参数发生了改变

0X102 kEdsPropertyEvent_PropertyChanged - 这个参数说明参数发生了改变

err = EdsDownloadEvfImage(theCamera, evfImage);    这里偶尔会出现 bug : EDS_ERR_OBJECT_NOTREADY ;      如果要获取流的话  就要不断去查询才可以,查询到object准备好了 就获取里面的数据。






转载于:https://www.cnblogs.com/luoyinjie/p/8803683.html

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP