Как установить / получить свойства снимков, сделанных с помощью canon EDSDK 2.12?

Я новичок в программировании на С ++ и начинаю использовать Canon EDSDK 2.12 для дистанционного управления зеркальной камерой EOS 600D. Я использовал код Вот чтобы лучше понять, как получить доступ к камере и сделать один снимок, и он работает нормально, но теперь я не уверен, как продолжить работу с моей программой, потому что я не могу понять возможности SDK с помощью Справочника по программированию.

Можно ли сделать снимок, сохраненный на camaeras SD, с индивидуальным именем?

если не

Как мне создать обработчик событий? Я хотел бы получить строку, состоящую из пути к изображению на SD (папка & имя изображения в качестве уникального идентификатора) каждый раз, когда делается снимок, и выполняйте с ним некоторые другие задачи.

Я надеюсь, что это помогает понять, что я хочу сделать.

0

Решение

Это описано в документации по SDK и, вероятно, немного запоздало для вас, но может быть полезно для других.

Чтобы создать обработчик событий, вам нужно сделать что-то вроде следующего через некоторое время после того, как вы получите ссылку на камеру и откроете сеанс:

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

В ответ на обратный вызов Canon 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. Просто использование имени файла не гарантирует уникальное имя.

0

Другие решения

Я могу придумать несколько решений.

  1. Windows имеет API (FindFirstChangeNotification а также FindNextChangeNotificaton), что позволяет обнаруживать изменения в каталоге. Просто используйте «диск», на котором камера представлена ​​как на компьютере, как «здесь я хочу видеть уведомления». Я никогда не программировал на Mac, но, похоже, что-то называется FSEvents это сделало бы что-то подобное.

  2. Вы можете положиться на камеру, чтобы сохранить изображение под постоянным именем. Когда ваше приложение запустится, найдите последний файл на диске, который является хранилищем камеры. Затем просто введите его в «IMG_0991.JPG» [замените «JPG» на «CR2», если вы используете режим RAW], и ​​получите «IMG_0992.JPG». Это работает каждый раз, все время. В конечном итоге он будет перенесен на IMG_0001.JPG, когда вы взяли 10000 изображений (и, вероятно, переместится в новый каталог с именем «DCIM / 101CANON» вместо «DCIM / 100CANON»).

  3. Просканируйте каталог и сохраните список всех файлов. Затем отсканируйте это снова. Это может занять некоторое время, если изображений много.

-1

По вопросам рекламы [email protected]