是否有人使用佳能EDSDK实现LiveView的示例C代码?文档中的示例代码看起来很棒,直到您完成此操作:
// // display image //
是的,就是这样.它们没有显示如何使用从相机检索到的数据将图像BLT到窗口.他们只是说,“显示图像”.谢谢,佳能.
我已经搜索了互联网(包括这个论坛),但我还没有找到一个C代码示例来说明如何执行此操作.我希望避免使用MFC,VB,托管代码或C#.当然可以在香草C中做到这一点,对吗?香草C也很好.
谢谢,
FredP
解决方法
它们没有告诉您有两个功能:
1)EdsGetPointer
2)EdsGetLength
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; }
原文地址:https://www.jb51.cc/c/118860.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。