是否有人使用佳能EDSDK实现LiveView的示例C代码?文档中的示例代码看起来很棒,直到您完成此操作:
//
// Display image
//
Run Code Online (Sandbox Code Playgroud)
是的,就是这样.它们没有显示如何使用从相机检索到的数据将图像BLT到窗口.他们只是说,"显示图像".谢谢,佳能.
我已经搜索了互联网(包括这个论坛),但我还没有找到一个C代码示例来说明如何执行此操作.我希望避免使用MFC,VB,托管代码或C#.当然可以在香草C中做到这一点,对吗?Vanilla C++也很好.
谢谢FredP
他们没有告诉您两个功能:
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;
}
Run Code Online (Sandbox Code Playgroud)