Я новичок в программировании на С ++ и начинаю использовать Canon EDSDK 2.12 для дистанционного управления зеркальной камерой EOS 600D. Я использовал код Вот чтобы лучше понять, как получить доступ к камере и сделать один снимок, и он работает нормально, но теперь я не уверен, как продолжить работу с моей программой, потому что я не могу понять возможности SDK с помощью Справочника по программированию.
Можно ли сделать снимок, сохраненный на camaeras SD, с индивидуальным именем?
если не
Как мне создать обработчик событий? Я хотел бы получить строку, состоящую из пути к изображению на SD (папка & имя изображения в качестве уникального идентификатора) каждый раз, когда делается снимок, и выполняйте с ним некоторые другие задачи.
Я надеюсь, что это помогает понять, что я хочу сделать.
Это описано в документации по 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. Просто использование имени файла не гарантирует уникальное имя.
Я могу придумать несколько решений.
Windows имеет API (FindFirstChangeNotification
а также FindNextChangeNotificaton
), что позволяет обнаруживать изменения в каталоге. Просто используйте «диск», на котором камера представлена как на компьютере, как «здесь я хочу видеть уведомления». Я никогда не программировал на Mac, но, похоже, что-то называется FSEvents это сделало бы что-то подобное.
Вы можете положиться на камеру, чтобы сохранить изображение под постоянным именем. Когда ваше приложение запустится, найдите последний файл на диске, который является хранилищем камеры. Затем просто введите его в «IMG_0991.JPG» [замените «JPG» на «CR2», если вы используете режим RAW], и получите «IMG_0992.JPG». Это работает каждый раз, все время. В конечном итоге он будет перенесен на IMG_0001.JPG, когда вы взяли 10000 изображений (и, вероятно, переместится в новый каталог с именем «DCIM / 101CANON» вместо «DCIM / 100CANON»).
Просканируйте каталог и сохраните список всех файлов. Затем отсканируйте это снова. Это может занять некоторое время, если изображений много.