现在我自己为佳能 EDSDK 工作。我将实时图像变得很慢(每秒5幅图像)。我怎么能更快地做到这一点?
这是获取图像指针的代码:
uint _err = EDSDK.EDS_ERR_OK; IntPtr imageRef = IntPtr.Zero; IntPtr streamRef = IntPtr.Zero; IntPtr streamPtr = IntPtr.Zero; uint Length = 0; _err = EDSDK.EdsCreateMemoryStream(0, out streamRef); if (EDSDK.EDS_ERR_OK == _err) _err = EDSDK.EdsCreateEvfImageRef(streamRef, out imageRef); if (EDSDK.EDS_ERR_OK == _err) _err = EDSDK.EdsDownloadEvfImage(_camera, imageRef); if (EDSDK.EDS_ERR_OK == _err) { // display image _err = EDSDK.EdsGetPointer(streamRef, out streamPtr); if (EDSDK.EDS_ERR_OK == _err) _err = EDSDK.EdsGetLength(streamRef, out Length); }
然后我将图像加载到Bitmap,它非常慢。我的代码:
byte[] b = new byte[Length]; Marshal.Copy(streamPtr, b, 0, (int)Length); using ( MemoryStream ac = new MemoryStream(b)) { img = (Bitmap)Image.FromStream(ac); ac.Close(); }
答案 0 :(得分:1)
libjpeg-turbo,此处http://libjpeg-turbo.virtualgl.org/可实时解码
答案 1 :(得分:0)
您是否尝试过使用EdsGetImage方法从内存流中提取图像数据?
要使用此方法,您需要在使用EdsDownloadEvf方法(使用EdsCreateImageRef方法)后从内存流中创建其他图像引用。然后,您可以在EdsGetImage方法中使用此图像参考来提取未压缩的图像数据。