2010-07-10 15 views
7

क्या कोई ऐसा नमूना सी कोड का काम करने वाला टुकड़ा है जो कैनन ईडीएसडीके का उपयोग करके लाइवव्यू लागू करता है? प्रलेखन में नमूना कोड तब तक बढ़िया दिखता है जब तक आप इस बिट तक नहीं पहुंच जाते:कैनन ईडीएसडीके लाइवव्यू के लिए नमूना सी कोड?

// 
// Display image 
// 

यूप, यही है। वे कैमरे से पुनर्प्राप्त डेटा का उपयोग करके एक छवि को एक छवि में बीएलटी कैसे बीएलटी दिखाने के लिए नहीं दिखाते हैं। वे बस कहते हैं, "छवि प्रदर्शित करें।" धन्यवाद, कैनन।

मैंने इंटरनेट (इस मंच सहित) को शिकार किया है, लेकिन मुझे अभी तक एक सी कोड नमूना नहीं मिला है जो दिखाता है कि यह कैसे करें। मैं एमएफसी, वीबी, प्रबंधित कोड, या सी # से बचने के लिए देख रहा हूँ। निश्चित रूप से वेनिला सी में ऐसा करना संभव है, है ना? वेनिला सी ++ भी ठीक है।

धन्यवाद, FredP

+1

क्या आपके पास एमएफसी, वीबी, प्रबंधित कोड, या सी # उदाहरण हैं? यदि ऐसा है, तो उस कोड को शामिल या लिंक करने से यहां सी समकक्ष को समझने में मदद मिल सकती है। –

+0

निश्चित रूप से। यहां स्टैक ओवरफ़्लो पर एक वी उदाहरण दिया गया है: http://stackoverflow.com/questions/895265/live-view-with-canon-edsdk-2-5-2-vb-net यह एक बड़ी, गहरी चीज है प्रदर्शित करने के लिए एक वीबी विशिष्ट जीयूआई तत्व का उपयोग करता है। मैं एक सादे पुराने एचडीसी में बीएलटी की कोशिश कर रहा हूं। यह सी # एक ... http://tech.groups.yahoo.com/group/CanonSDK/message/1155 ... जिस तरह से सरल है, लेकिन एक "CImage" में एक महत्वपूर्ण बिंदु पर उपयोग करता है कोड। – FredP

+0

गुरु, क्या गड़बड़ है। अगर मेरे पास एक संगत कैमरा था तो मैं इसमें एक झटका लगा सकता हूं। शुभकामनाएं, लेकिन आपको माइक्रोसॉफ्ट कुल-एड पीना पड़ सकता है। –

उत्तर

4

दो कार्य है कि वे आप के बारे में नहीं बताया रहे हैं:
1) EdsGetPointer
2) EdsGetLength

यह आपको की शुरुआत करने के लिए एक सूचक दे ​​देंगे क्रमशः जेपीईजी धारा और आकार।

एक बार जब आप 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; 
} 
संबंधित मुद्दे