Я новичок в c ++ и канон EDSDK, теперь я могу управлять камерой, чтобы делать снимки, используя SDK, но я хочу сохранить снимки по пути c: \ photo, я пробовал некоторые методы, теперь снимки не сохраняются в камера, но я не могу найти их в моем компьютере. Как мне изменить свой код или что добавить?
#include "stdafx.h"#include "EDSDK.h"#include "EDSDKErrors.h"#include "EDSDKTypes.h"EdsError getFirstCamera(EdsCameraRef *camera);
int _tmain(int argc, _TCHAR* argv[])
{ EdsError err=EDS_ERR_OK;
EdsCameraRef camera=NULL;
bool isSDKloaded=false;
// Initialize SDK
err=EdsInitializeSDK();
if(err==EDS_ERR_OK)
{
isSDKloaded=true;
}
// Get first camera
if(err==EDS_ERR_OK)
{
err=getFirstCamera(&camera);
}
EdsOpenSession(camera);
EdsInt32 saveTarget = kEdsSaveTo_Host;
err = EdsSetPropertyData( camera, kEdsPropID_SaveTo, 0, 4, &saveTarget );
EdsSendCommand(camera, kEdsCameraCommand_TakePicture, 0);
EdsCloseSession(camera);
EdsTerminateSDK();
return 0;
}EdsError getFirstCamera(EdsCameraRef *camera)
{
EdsError err=EDS_ERR_OK;
EdsCameraListRef cameraList=NULL;
EdsUInt32 count=0;
// Get camera list
err = EdsGetCameraList(&cameraList);
// Get number of cameras
if(err == EDS_ERR_OK)
{
err = EdsGetChildCount(cameraList, &count);
if(count == 0)
{
err = EDS_ERR_DEVICE_NOT_FOUND;
}
}
// Get first camera retrieved
if(err == EDS_ERR_OK)
{
err = EdsGetChildAtIndex(cameraList , 0 , camera);
}
// Release camera list
if(cameraList != NULL)
{EdsRelease(cameraList);
cameraList = NULL;
}
return err;
}
У меня была такая же проблема пару недель назад. Вы сказали камере, что она должна хранить изображения на хосте, но вы не сказали ей, сколько места доступно на диске. Это можно сделать с помощью
EdsInt32 saveTarget = kEdsSaveTo_Host;
err = EdsSetPropertyData( camera, kEdsPropID_SaveTo, 0, 4, &saveTarget );
EdsCapacity newCapacity = {0x7FFFFFFF, 0x1000, 1};
err = EdsSetCapacity(camera, newCapacity);
На следующем шаге вам нужно будет изменить функцию загрузки. Если вы хотите загрузить изображение на свой хост-компьютер, вы должны принять участие в следующем событии.
kEdsObjectEvent_DirItemRequestTransfer
Чтобы указать место загрузки на хост-компьютере, вы можете попробовать это:
str_path = " c:\\photo\\Img.jpg";
const char* ch_dest = str_path.c_str();
EdsCreateFileStream( ch_dest ,kEdsFileCreateDisposition_CreateAlways,kEdsAccess_ReadWrite, &stream);
Я хотел бы отметить, что приведенный выше фрагмент кода перезаписывает файл Img.jpg при каждом запуске.
ура
TL
Других решений пока нет …