- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我在 EOS 50D 相机上使用 EDSDK v2.13。我想将拍摄的照片保存在我的主机中。我正在使用这段代码(C++):
EdsOpenSession(camera);
EdsInt32 saveTarget = kEdsSaveTo_Both;
err = EdsSetPropertyData( camera, kEdsPropID_SaveTo, 0, 4, &saveTarget );
EdsCapacity newCapacity = {0x7FFFFFFF, 0x1000, 1};
err = EdsSetCapacity(camera, newCapacity);
const char* ch_dest = "C:\\photo\\Img.jpg";
EdsCreateFileStreamEx( ch_dest ,kEdsFileCreateDisposition_CreateNew,kEdsAccess_ReadWrite, 0);
EdsSendCommand(camera, kEdsCameraCommand_TakePicture, 0);
EdsCloseSession(camera);
EdsTerminateSDK();
相机快门正常启动,我在相机的存储卡中找到了照片,但在我的 PC 中找不到。
请帮忙。
最佳答案
这样不行。拍完照片后,您需要捕获 ObjectEvent,然后下载文件。它的工作原理是这样的:
很抱歉,我不能为您提供实际代码,我不是 C++ 开发人员。不过,如果您愿意,我可以向您展示一些 C# 代码。要了解有关功能如何工作的更多详细信息,您还可以查看 SDK 的文档。
亲切的问候
编辑:
好的,在文档的帮助下,一些 C++ 代码:请注意,这就是它以最简单的形式工作的方式。您应该始终检查是否 err != EDS_ERR_OK。并且您应该仅在图像下载后调用 Close。
void TakePhoto()
{
EdsError err = EDS_ERR_OK;
EdsCameraRef camera = NULL;
EdsCameraListRef cameraList = NULL;
EdsUInt32 count = 0;
err = EdsInitializeSDK();
err = EdsGetCameraList(&cameraList);
err = EdsGetChildCount(cameraList, &count);
if (count > 0)
{
err = EdsGetChildAtIndex(cameraList, 0, &camera);
cameraList = NULL;
err = EdsSetObjectEventHandler(camera, kEdsObjectEvent_All, handleObjectEvent, NULL);
err = EdsOpenSession(camera);
err = EdsSendCommand(camera, kEdsCameraCommand_TakePicture, 0);
}
}
void Close(EdsCameraRef *camera)
{
err = EdsCloseSession(camera);
EdsRelease(camera);
EdsTerminateSDK();
}
static EdsError EDSCALLBACK handleObjectEvent(EdsObjectEvent event, EdsBaseRef object, EdsVoid * context)
{
if (event == kEdsObjectEvent_DirItemRequestTransfer)
{
EdsError err = EDS_ERR_OK;
EdsStreamRef stream = NULL;
EdsDirectoryItemInfo dirItemInfo;
err = EdsGetDirectoryItemInfo(object, &dirItemInfo);
err = EdsCreateFileStream(dirItemInfo.szFileName, kEdsFileCreateDisposition_CreateAlways, kEdsAccess_ReadWrite, &stream);
err = EdsDownload(object, dirItemInfo.size, stream);
err = EdsDownloadComplete(object);
EdsRelease(stream);
stream = NULL;
}
if (object) EdsRelease(object);
}
关于c++ - 佳能 EDSDK 在我的电脑中保存图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22965982/
我与 Canon EDSDK 的斗争已经有一段时间了。我可以成功地让库将文件直接保存到磁盘,但是,我无法在内存中获取图像 byte[]。每当我尝试将 EDSDK 流 Marshal.Copy() 到
我目前正尝试在 C++ 中使用 Canon SDK。这确实是我第一次使用 SDK,我是 C++ 的初学者。 问题是,当我尝试使用 EdsInitializeSDK() 函数初始化 SDK 时,它立即崩
我在 EOS 50D 相机上使用 EDSDK v2.13。我想将拍摄的照片保存在我的主机中。我正在使用这段代码(C++): EdsOpenSession(camera); EdsInt
我正在尝试将我的佳能相机拍摄的图像从其 SD 卡下载到主机 PC,我编写了代码以便它拍摄照片并且不再将其保存在 SD 卡上,但我找不到它在主机 PC 上。有没有大佬指点一下??我的主要和功能如下所示,
我已经尝试让这项工作有一段时间了...阅读了很多帖子,但没有一个可以解决这个问题。 我正在使用 Canon SDK 连接到 EOS 550D。我正在运行 win7 64 位和 Visual Studi
我正在寻找一种能够从 delphi 控制我的佳能或尼康相机的方法,基本上我需要找到一种方法来在相机与 USB 连接时接收新图像,即检测何时拍摄新照片,以便我可以在我的应用程序中采取措施,例如裁剪图像、
我正在使用 Canon SDK 2.1,我正在尝试通过 C# 代码在相机上拍照。我启动了一个 session (EdsOpenSession),这行代码一切正常: EDSDK.EdsSendComma
我正在尝试实时显示 LiveView 图像。我在 Windows 下使用 EDSDK 2.14 + Qt5 + opencv+mingw32。我在图像处理方面不是很熟练,所以现在我遇到了以下问题。我使
是否有人拥有使用佳能 EDSDK 实现 LiveView 的示例 C 代码的工作片段?在您了解这一点之前,文档中的示例代码看起来很棒: // // Display image // 是的,就是这样。他
我正在 Visual Studio 2010 中编写基于 Windows 的应用程序。我的主机 PC 连接到两台 Canon EOS 600D。到目前为止,我设法拍了两张照片,直接(没有 SD 卡)将
我是一名优秀的程序员,十分优秀!