【问题标题】:Sample C code for Canon EDSDK Liveview?佳能 EDSDK Liveview 的示例 C 代码?
【发布时间】: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 示例:stackoverflow.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。谢谢

标签: c sample edsdk


【解决方案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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多