2

现在我为自己开发佳能EDSDK。我的实时取景图像非常慢(每秒 5 张图像)。我怎样才能更快地做到这一点?

这是我获取图像指针的代码:

    uint _err = EDSDK.EDS_ERR_OK;
    IntPtr imageRef = IntPtr.Zero;
    IntPtr streamRef = IntPtr.Zero;
    IntPtr streamPtr = IntPtr.Zero;
    单位长度 = 0;

    _err = EDSDK.EdsCreateMemoryStream(0, out streamRef);
    如果(EDSDK.EDS_ERR_OK == _err)
      _err = EDSDK.EdsCreateEvfImageRef(streamRef, out imageRef);

    如果(EDSDK.EDS_ERR_OK == _err)
      _err = EDSDK.EdsDownloadEvfImage(_camera, imageRef);          

    如果(EDSDK.EDS_ERR_OK == _err)
    {
      // 显示图像
      _err = EDSDK.EdsGetPointer(streamRef, out streamPtr);
      如果(EDSDK.EDS_ERR_OK == _err)
        _err = EDSDK.EdsGetLength(streamRef, out Length);
    }   

然后我将图像加载到位图,它非常非常慢。我的代码:

    字节[] b = 新字节[长度];
    Marshal.Copy(streamPtr, b, 0, (int)Length);
    使用 (MemoryStream ac = new MemoryStream(b))
    {
      img = (Bitmap)Image.FromStream(ac);
      ac.Close();
    }

4

2 回答 2

1

libjpeg-turbo,可在此处获取http://libjpeg-turbo.virtualgl.org/将实时解码

于 2013-02-21T20:13:15.720 回答
0

您是否尝试过使用 EdsGetImage 方法从内存流中提取图像数据?

为了使用此方法,您需要在使用 EdsDownloadEvf 方法(使用 EdsCreateImageRef 方法)后从内存流中创建一个额外的图像引用。然后,您可以在 EdsGetImage 方法中使用此图像参考来提取未压缩的图像数据。

于 2013-01-31T10:08:08.897 回答