2010-07-10 4 views
7

캐논 EDSDK를 사용하여 LiveView를 구현하는 샘플 C 코드가있는 사람이 있습니까? 설명서의 샘플 코드는 다음과 같이 나타납니다.Canon EDSDK 실재보기 용 샘플 C 코드?

// 
// Display image 
// 

그래, 맞아. 카메라에서 가져온 데이터를 사용하여 창에 이미지를 BLT하는 방법을 보여주지 않습니다. 그들은 단지 "이미지 표시"라고 말합니다. 고마워, 캐논.

나는 (이 포럼을 포함하여) 인터넷을 사냥했지만, 아직 이것을 수행하는 방법을 보여주는 C 코드 샘플을 찾지 못했습니다. MFC, VB, 관리 코드 또는 C#을 피하려고합니다. 분명히 바닐라 C에서이 작업을 수행 할 수 있습니다. 바닐라 C++도 괜찮습니다.

감사합니다, FredP

+1

MFC, VB, 관리 코드 또는 C# 예제가 있습니까? 그렇다면이 코드를 여기에 포함 시키거나 링크하면 C 코드를 찾아 낼 수 있습니다. –

+0

예. 스택 오버플로의 V 예는 다음과 같습니다. http://stackoverflow.com/questions/895265/live-view-with-canon-edsdk-2-5-2-vb-net 큰 문제는 VB 특정 GUI 요소를 사용하여 표시합니다. 나는 평범한 구식 HDC에 BLT하려고 노력하고있다. 이 C# 하나 ... http://tech.groups.yahoo.com/group/CanonSDK/message/1155 ... 방법은 간단하지만,하는 중요한 시점에서 "C 화상"을 사용 암호. – FredP

+0

Gurgh, 무슨 엉망 이군. 호환되는 카메라를 가지고 있다면 카메라를 쳐다볼 수 있습니다. 행운을 빌어 요.하지만 Microsoft Kool-Aid를 마셔야 할 수도 있습니다. –

답변

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; 
}