佳能 EDSDK Liveview 的示例 C 代码?
Posted
技术标签:
【中文标题】佳能 EDSDK Liveview 的示例 C 代码?【英文标题】:Sample C code for Canon EDSDK Liveview? 【发布时间】:2010-07-10 00:54:32 【问题描述】:是否有人拥有使用佳能 EDSDK 实现 LiveView 的工作示例 C 代码?文档中的示例代码看起来很棒,直到您了解这一点:
//
// Display image
//
是的,就是这样。他们没有展示如何使用从相机检索到的数据将图像 BLT 到窗口。他们只是说,“显示图像”。谢谢佳能。
我已经上网(包括这个论坛),但我还没有找到一个 C 代码示例来说明如何做到这一点。我希望避免使用 MFC、VB、托管代码或 C#。当然可以在香草C中做到这一点,对吧? Vanilla C++ 也不错。
谢谢, 弗雷德普
【问题讨论】:
您有 MFC、VB、托管代码或 C# 示例吗?如果是这样,在此处包含或链接到该代码可能有助于找出 C 等效项。 当然。这是 Stack Overflow 上的 V 示例:***.com/questions/895265/… 这是一个使用 VB 特定 GUI 元素显示的大而粗糙的东西。我正在尝试将 BLT 转换为普通的旧 HDC。这个 C# ...tech.groups.yahoo.com/group/CanonSDK/message/1155 ...更简单,但在代码的关键点使用“CImage”。 Gurgh,真是一团糟。如果我有兼容的相机,我可能会对它进行打击。祝你好运,但你可能不得不喝微软的 Kool-Aid。 布洛克,古尔,确实!我想我会继续破解它...... 嗨 FredP,您是否能够编写 C 代码来获取 liveView?如果是这样,你能给我一个线索吗?我刚开始用 C 编程,我想在学习的同时控制我的 DR Xsi。谢谢 【参考方案1】:他们没有告诉你两个函数:
1) EdsGetPointer
2)EdsGetLength
这将为您提供一个指向 JPEG 流的开头和大小的指针。
一旦你有这个使用LibJPEG Turbo
解压缩,Libjpeg
就不够快了。
解压后,可以使用opencv
显示图片。
bool CanonCamera::downloadLiveViewImage()
EdsError err = EDS_ERR_OK;
EdsEvfImageRef image = NULL;
EdsStreamRef stream = NULL;
unsigned char* data = NULL;
unsigned long size = 0;
err = EdsCreateMemoryStream(0, &stream);
if (err != EDS_ERR_OK)
cout << "Download Live View Image Error in Function EdsCreateMemoryStream: " << err << "\n";
return false;
err = EdsCreateEvfImageRef(stream, &image);
if (err != EDS_ERR_OK)
cout << "Download Live View Image Error in Function EdsCreateEvfImageRef: " << err << "\n";
return false;
err = EdsDownloadEvfImage(cameraRef, image);
if (err != EDS_ERR_OK)
cout << "Download Live View Image Error in Function EdsDownloadEvfImage: " << err << "\n";
return false;
err = EdsGetPointer(stream, (EdsVoid**)& data);
if (err != EDS_ERR_OK)
cout << "Download Live View Image Error in Function EdsGetPointer: " << err << "\n";
return false;
err = EdsGetLength(stream, &size);
if (err != EDS_ERR_OK)
cout << "Download Live View Image Error in Function EdsGetLength: " << err << "\n";
return false;
// libjpegTurbo(data, size);
// display RGB image in opencv
if (stream != NULL)
EdsRelease(stream);
stream = NULL;
if (image != NULL)
EdsRelease(image);
image = NULL;
data = NULL;
return true;
【讨论】:
以上是关于佳能 EDSDK Liveview 的示例 C 代码?的主要内容,如果未能解决你的问题,请参考以下文章
OSX EdsOpenSession exc_bad_access 上的佳能 EDSDK 2.11
佳能数字 SDK (EDSDK) EdsCreateImageRef 错误