2013-04-27 98 views
2

我在C初學者++和佳能EDSDK,現在我可以控制相機進行拍攝使用SDK的照片,但我想保存的圖片到路徑C:\照片,我已經嘗試了一些方法,現在的照片不會保存到相機,但在我的電腦我無法找到他們。我應該如何更改我的代碼或添加什麼?拍照並保存圖片到我的C:使用edsdk 2.10照片,使用C++

#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; 
} 
+1

你檢查你的應用程序文件夾,通常其保存在那裏。還需要設置'舉辦memory'屬性'EdsCapacity hostMemory''EDSDK.EdsSetCapacity(相機,hostMemory)' – 2013-05-05 05:38:44

回答

3

幾周前我有同樣的問題。您告訴相機應該將照片存儲到主機,但您沒有告訴它有多少空間可用在磁盤上。這可以通過

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); 

我想請注意,上面的代碼snipplet會在每次觸發triggert時覆蓋文件Img.jpg。

乾杯 TL