繁体   English   中英

如何设置/获取使用佳能EDSDK 2.12拍摄的照片的属性?

[英]How to set/get properties of pictures taken with canon EDSDK 2.12?

我是C ++编程的初学者,并且开始使用Canon EDSDK 2.12远程控制EOS 600D DSLR。 我在这里使用了代码以更好地了解如何访问相机并拍摄单张照片,它可以正常工作,但是现在我不确定如何继续执行程序,因为我无法确定SDK的可能性。编程参考。

是否可以用自定义名称拍摄保存在相机SD上的照片?

如果不

我必须如何创建事件处理程序? 我想每次拍摄照片时都得到一个由SD上的图像路径组成的字符串(文件夹和图像名称作为唯一ID),并用它执行其他一些任务。

我希望这有助于了解我想做什么。

SDK文档中对此进行了描述,可能对您来说有点晚,但对其他人可能会有帮助。

要创建事件处理程序,您需要在具有摄像机参考并打开会话后的一段时间内执行以下操作:

Err = EdsSetObjectEventHandler( Camera, kEdsObjectEvent_All, HandleAllObjectEvents, NULL);

为了响应佳能SDK对对象事件的回调(即在HandleAllObjectEvents函数中),您可以执行以下操作:

switch ( inEvent ) {
    case kEdsObjectEvent_DirItemCreated:
        // new file created on camera card
        EdsDirectoryItemRef fileNameRef;
        EdsDirectoryItemRef folderNameRef;
        EdsDirectoryItemInfo fileNameInfo;
        EdsDirectoryItemInfo folderNameInfo;

        fileNameRef = (EdsDirectoryItemRef)inObject;
        EdsGetDirectoryItemInfo( fileNameRef, &fileNameInfo );  // got the file name and some other info
        EdsGetParent( fileNameRef, &folderNameRef );
        EdsGetDirectoryItemInfo( folderNameRef, &folderNameInfo );  // got the folder name

        char fname[100];
        strcpy( fname, folderNameInfo.szFileName );
        strcat( fname, "\\" );
        strcat( fname, fileNameInfo.szFileName );

如您所知,如果要拍摄大量照片,获取文件夹名称非常重要,因为文件名将从IMG_9999.jpg移到IMG_0000.jpg,并且文件会放入新文件夹(例如,从100CANON到101CANON。使用文件名不能保证名称唯一。

我可以想到几种解决方案。

  1. Windows有一个API( FindFirstChangeNotificationFindNextChangeNotificaton ),可让您检测目录中的更改。 只需使用相机在计算机上所代表的“驱动器”,即“我想从中看到通知的位置”。 我从未在Mac上进行过编程,但是它似乎有一个名为FSEvents的东西,可以做类似的事情。

  2. 您可以依靠相机以一致的名称存储图像。 当应用程序启动时,在驱动器中找到相机的最后一个文件。 然后只需将其编号为“ IMG_0991.JPG”(如果使用RAW模式,将“ JPG”替换为“ CR2”)将变为“ IMG_0992.JPG”。 这一直都在起作用。 当您拍摄了10000张图像后,它最终将环绕到“ IMG_0001.JPG”(它可能会移动到名为“ DCIM / 101CANON”的新目录,而不是“ DCIM / 100CANON”)。

  3. 扫描目录并保留所有文件的列表。 然后再次扫描。 如果有很多图像,这可能需要一些时间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM