使用MemoryStream

时间:2017-12-12 12:58:51

标签: canon-sdk

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

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

唯一有效的方法是将数据转储到磁盘,然后使用EdsCreateFileStream打开此文件并将其传递给EdsGetImageRef。有没有人能够为MemoryStream创建一个ImageRef,如果有的话,你能指出一下为了成功需要做些什么吗?

2 个答案:

答案 0 :(得分:0)

我想这与Canon Digital SDK (EDSDK) EdsCreateImageRef error

一样

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

答案 1 :(得分:-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客户端应用程序   视窗:   为了执行EDSDK客户端应用程序,需要所有DLL。   DLL文件夹中的所有模块都必须复制到EDSDK客户端应用程序所在的文件夹中。

需要帮助