2

我是c++和canon 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;
}
4

1 回答 1

5

几周前我遇到了同样的问题。您告诉相机它应该将图片存储到主机,但您没有告诉它磁盘上有多少可用空间。这可以通过

EdsInt32 saveTarget = kEdsSaveTo_Host;
err = EdsSetPropertyData( camera, kEdsPropID_SaveTo, 0, 4, &saveTarget );
EdsCapacity newCapacity = {0x7FFFFFFF, 0x1000, 1};
err = EdsSetCapacity(camera, newCapacity);

在下一步中,您必须修改下载功能。如果您想将图片下载到您的主机 PC,您必须处理以下事件

kEdsObjectEvent_DirItemRequestTransfer

要指定主机 PC 上的下载目标,您可以尝试以下操作:

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

于 2013-05-07T07:23:07.717 回答