佳能数字 SDK (EDSDK) EdsCreateImageRef 错误

Posted

技术标签:

【中文标题】佳能数字 SDK (EDSDK) EdsCreateImageRef 错误【英文标题】:Canon Digital SDK (EDSDK) EdsCreateImageRef error 【发布时间】:2016-02-22 02:52:22 【问题描述】:

我正在尝试使用 Canon Eos Digital SDK (EDSDK) 解码 CR2 相机图像以在桌面 GUI 中显示。

我运行前几个方法如下:

err = EDSDK.EdsInitializeSDK();
err = EDSDK.EdsCreateFileStream(
                fullpath, 
                EDSDK.EdsFileCreateDisposition.OpenExisting, 
                EDSDK.EdsAccess.Read, 
                out inStream);
err = EDSDK.EdsCreateImageRef(inStream, out imgRefPtr);

err 变量保持为 EDS_ERR_OK 直到它执行上面的最后一行,它变成 EDS_ERR_FILE_FORMAT_UNRECOGNIZED。

拍摄图像的相机是 EOS 5DS R,从 3.2.1 版本(我们当前的版本)开始支持。此外,CR2 图像可以在原始图像查看器 Digital Photo Professional 4 中打开。

关于如何在尝试创建图像参考时克服文件格式无法识别错误的任何建议?

【问题讨论】:

3.x 版本的图像工具似乎仍然很糟糕。我在保存照片时遇到了问题,而相同的代码在 2.x 版本中完美运行。 【参考方案1】:

我刚开始使用 EDSDK v 3.8.0。我遇到了同样的问题,但我能够找出导致它的原因:1.x 版在工作路径中搜索 dll,而 2.x 和 3.x 版使用 dll 在 exe 的位置搜索.因此,复制我的 Visual Studio 项目的调试和发布目录中的文件修复了它。

【讨论】:

你是救命稻草【参考方案2】:

我现在正在尝试使用相同的相机和佳能 SDK 解决类似的问题。此版本的变更日志指出:

“增加了对 RAW 开发功能的支持。 添加了对 RAW 开发功能的支持 用于 64 位模块的 beta 版本。 请注意:支持的相机限制如下 用于 64 位模块中的图像处理功能。 EOS 5DS / EOS 5DS R / EOS REBEL T6s / EOS 760D / EOS 8000D / EOS REBEL T6i / EOS 750D / EOS Kiss X8i / EOS M3"

您是否尝试过通过 64 位应用程序执行图像处理?

【讨论】:

我已经尝试过 32 位和 64 位测试应用程序。有趣的是,我在尝试使用 EOS 5D Mark III 解码时遇到了同样的错误,该支持是在 2.11 中添加的。此外,我正在尝试使用 libraw 图像解码库获得更多(但不是完全)成功。 在 32 位中,我还尝试了佳能 5D Mark II 相机并遇到了同样的问题。似乎佳能在加载 .cr2 文件和开发流式图像时都破坏了 EdsCreateImageRef。大卫,如果你对 libraw 有更好的运气,请告诉我! 我能够使用 Libraw 成功解码图像。作为一名 C# 开发人员,我必须首先 P/Invoke 和 Marshall 所需的函数和结构,然后遵循类似于 samples/cdraw_emulator 文件中的方法。祝你好运

以上是关于佳能数字 SDK (EDSDK) EdsCreateImageRef 错误的主要内容,如果未能解决你的问题,请参考以下文章

佳能 EDSDK 在我的电脑中保存图像

OSX EdsOpenSession exc_bad_access 上的佳能 EDSDK 2.11

来自佳能 EDSDK EdsInitializeSDK() API 的 EXC_BAD_ACCESS

佳能 LiveView:图像转换为 OpenCV Mat

使用edsdk 2.8拍照并直接将图像保存到PC

佳能 SDk 文章,作者 Johannes Bildstein