佳能 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 错误

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

来自佳能 EDSDK EdsInitializeSDK() API 的 EXC_BAD_ACCESS

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

佳能ix6580 错误号码6502是啥原因