0

我想从佳能相机(EOS 550D 和 EOS 1300D)捕捉 RAW 图像并将它们转换为 RGB,而不将它们保存在磁盘上。我假设这应该是可能的,因为 EdsCreateImageRef 接受 StreamRef,它可以是 FileStream 或 MemoryStream。但是,每当我使用 MemoryStream 而不是 FileStream 时,EdsGetImageRef 将返回 EDS_ERR_FILE_FORMAT_UNRECOGNIZED。我尝试了几种变体:

  • 下载到 MemoryStream 并直接在此调用 EdsGetImageRef
  • 与上面相同,在两者之间寻找流的开头
  • 下载到 MemoryStream 中,将数据提取到我自己的数据缓冲区中并用这些数据填充新的 MemoryStream
  • 手动从磁盘加载数据(从已知有效的 CR2 文件)并用它填充 MemoryStream

唯一可行的是将数据转储到磁盘,然后使用 EdsCreateFileStream 打开此文件并将其传递给 EdsGetImageRef。有没有人能够为 MemoryStream 创建 ImageRef,如果是这样,您能否指出需要做什么才能成功?

4

2 回答 2

0

我想这与Canon Digital SDK (EDSDK) EdsCreateImageRef 错误相同

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

于 2018-09-20T22:00:00.393 回答
-1

我有同样的问题。

EDSDK.EdsCreateImageRef 返回 EDS_ERR_FILE_FORMAT_UNRECOGNIZED

我找到了解决方案。

在我的项目 EDSDK.dll 中放置在文件 EDSDK\Dll 中。DllImport 看起来像 [DllImport("EDSDK\Dll\EDSDK.dll")]

它适用于 JPEG 文件,但不适用于 CR2。

然后我将 EDSDK\Dll 中的所有 dll 放入根项目文件夹并更改 DllImport。

这个对我有用。

之后我在 EDSDK 手册中发现了非常有用的文本

1.4.3 执行 EDSDK 客户端应用程序 Windows:需要所有 DLL 才能执行 EDSDK 客户端应用程序。DLL 文件夹中的所有模块都必须复制到 EDSDK 客户端应用程序所在的同一文件夹中。

需要帮助

于 2018-11-02T13:34:31.457 回答