7

是否有人拥有使用佳能 EDSDK 实现 LiveView 的工作示例 C 代码?文档中的示例代码看起来很棒,直到您了解这一点:

// 
// Display image 
// 

是的,就是这样。他们没有展示如何使用从相机检索到的数据将图像 BLT 到窗口。他们只是说,“显示图像”。谢谢,佳能。

我已经搜索了互联网(包括这个论坛),但我还没有找到显示如何执行此操作的 C 代码示例。我希望避免使用 MFC、VB、托管代码或 C#。当然可以在香草C中做到这一点,对吧?Vanilla C++ 也很好。

谢谢,弗雷德普

4

1 回答 1

4

他们没有告诉您两个功能:
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;
}
于 2011-03-22T18:53:29.813 回答