7

Canon EDSDK を使用して LiveView を実装するサンプル C コードを持っている人はいますか? ドキュメントのサンプル コードは、このビットに到達するまでは見栄えがします。

// 
// Display image 
// 

うん、それだけです。カメラから取得したデータを使用して、画像をウィンドウに BLT する方法は示していません。「画像を表示してください」と言うだけです。ありがとう、キャノン。

私はインターネット (このフォーラムを含む) を探しましたが、これを行う方法を示す C コード サンプルをまだ見つけていません。MFC、VB、マネージ コード、または C# を避けたいと考えています。確かにバニラCでこれを行うことは可能ですよね? バニラ C++ も問題ありません。

ありがとう、フレッドP

4

1 に答える 1

4

彼らがあなたに教えていない2つの機能があります:
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 に答える