gpt4 book ai didi

c++ - 佳能 SDK - 下载图像到主机 PC

转载 作者:太空宇宙 更新时间:2023-11-04 11:50:20 25 4
gpt4 key购买 nike

我正在尝试将我的佳能相机拍摄的图像从其 SD 卡下载到主机 PC,我编写了代码以便它拍摄照片并且不再将其保存在 SD 卡上,但我找不到它在主机 PC 上。有没有大佬指点一下??我的主要和功能如下所示,排除了 getFirstCamera 功能。

我真的不知道回调函数等是如何工作的..所以如果有人可以提供代码片段,如果有问题需要修复,那就太好了

#include <stdio.h>
#include "EDSDK.h"
#include "EDSDKTypes.h"
#include "EDSDKErrors.h"

EdsError getFirstCamera(EdsCameraRef *camera);
EdsError downloadImage(EdsDirectoryItemRef directoryItem);
EdsError EDSCALLBACK handleStateEvent (EdsStateEvent event,EdsUInt32 parameter,EdsVoid * context);
EdsError EDSCALLBACK handleObjectEvent( EdsObjectEvent event,EdsBaseRef object,EdsVoid * context);
EdsError EDSCALLBACK handlePropertyEvent (EdsPropertyEvent event,EdsPropertyID property,EdsUInt32 inParam, EdsVoid * context);


int main(int argc, char **argv)
{
EdsError err;
EdsCameraRef camera = NULL;
bool isSDKLoaded = false;
EdsCapacity capacity = {0x7FFFFFFF, 0x1000, 1};
EdsInt32 saveTarget = kEdsSaveTo_Host;

// Initialize SDK
err = EdsInitializeSDK();
if(err == EDS_ERR_OK)
{
isSDKLoaded = true;
}

// Get first camera
if(err == EDS_ERR_OK)
{
err = getFirstCamera (&camera);
}


// Open session with camera
err = EdsOpenSession(camera);

// Set event handler
if(err == EDS_ERR_OK) err = EdsSetObjectEventHandler(camera, kEdsObjectEvent_All,handleObjectEvent, NULL);
if(err == EDS_ERR_OK) err = EdsSetPropertyEventHandler(camera, kEdsPropertyEvent_All,handlePropertyEvent, NULL);
if(err == EDS_ERR_OK) err = EdsSetCameraStateEventHandler(camera, kEdsStateEvent_All,handleStateEvent, NULL);

err = EdsSetPropertyData( camera, kEdsPropID_SaveTo, 0, 4, &saveTarget );

err = EdsSetCapacity(camera, capacity);

///// Take picture
err = EdsSendCommand(camera, kEdsCameraCommand_TakePicture, 0);
////

// Close session with camera
if(err == EDS_ERR_OK)
{
err = EdsCloseSession(camera);
}

// Release camera
if(camera != NULL)
{
EdsRelease(camera);
}

// Terminate SDK
if(isSDKLoaded)
{
EdsTerminateSDK();
}
}


EdsError EDSCALLBACK handleObjectEvent( EdsObjectEvent event,EdsBaseRef object,EdsVoid * context)
{
EdsError err=EDS_ERR_OK;

switch(event)
{
case kEdsObjectEvent_DirItemRequestTransfer:
err = downloadImage(object);
break;
default:
break;
}

// Object must be released
if(object){
err = EdsRelease(object);
}
return err;
}

EdsError EDSCALLBACK handlePropertyEvent (EdsPropertyEvent event,EdsPropertyID property,EdsUInt32 inParam, EdsVoid * context)
{
return EDS_ERR_OK;
}

EdsError EDSCALLBACK handleStateEvent (EdsStateEvent event,EdsUInt32 parameter,EdsVoid * context)
{
return EDS_ERR_OK;
}





EdsError downloadImage(EdsDirectoryItemRef directoryItem)
{
EdsError err = EDS_ERR_OK;
EdsStreamRef stream = NULL;
// Get directory item information
EdsDirectoryItemInfo dirItemInfo;
err = EdsGetDirectoryItemInfo(directoryItem, & dirItemInfo);

// Create file stream for transfer destination
if(err == EDS_ERR_OK)
{
err = EdsCreateFileStream( dirItemInfo.szFileName,kEdsFileCreateDisposition_CreateAlways,kEdsAccess_ReadWrite, &stream);
}
// Download image
if(err == EDS_ERR_OK)
{
err = EdsDownload( directoryItem, dirItemInfo.size, stream);
}
// Issue notification that download is complete
if(err == EDS_ERR_OK)
{
err = EdsDownloadComplete(directoryItem);
}
// Release stream
if( stream != NULL)
{
EdsRelease(stream);
stream = NULL;
}
return err;
}

最佳答案

当您调用 EdsCreateFileStream 时,只需在您希望文件到达的位置添加完全限定路径。 dirItemInfo.szFileName 只是文件名,因此如果您不包含路径,图像应该出现在您的工作目录中。

关于c++ - 佳能 SDK - 下载图像到主机 PC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18627500/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com