0

我使用 C# EDSDK 为佳能相机创建了一个相机控制器应用程序。我可以将图像下载到主机 PC,但与佳能 EOS Utility 软件相比仍然需要很多时间。目前我正在大约 2.5 秒内下载 22 兆像素的 Jpg 图像。当我使用佳能软件时,只需不到一秒钟。对于 RAW 图像 (22MPixel),使用 Canons Utility 软件大约需要 2 到 3 秒,使用 SDK 大约需要 11 秒。

我在 EventHandler 中使用以下代码:

public void DownloadImage(DownloadItem item)
{
        EDSDK.EdsDirectoryItemInfo dirInfo;
        IntPtr streamRef;
        Stopwatch timer = new Stopwatch();
        timer.Start();
        Error = EDSDK.EdsGetDirectoryItemInfo(item.ImageObjectPointer, 
                                              out dirInfo);
        Error = EDSDK.EdsCreateFileStream(
                                item.FilePath, 
                                EDSDK.EdsFileCreateDisposition.CreateAlways, 
                                EDSDK.EdsAccess.ReadWrite, 
                                out streamRef);

        Error = EDSDK.EdsDownload(item.ImageObjectPointer, dirInfo.Size, streamRef);
        //Tell the SDK we finished the download
        Error = EDSDK.EdsDownloadComplete(item.ImageObjectPointer);
        //Release Resources
        Error = Release(streamRef);
        Error = Release(item.ImageObjectPointer);
        timer.Stop();
        var ms = timer.ElapsedMilliseconds;
        this.Log().DebugFormat("Download time for image {0}: \t{1}\t ms",
                                Path.GetFileName(item.FilePath),
                                ms.ToString());

    }

有谁知道更快的图像下载程序?还是佳能在他们的软件中使用完全不同的例程?

在此先感谢您的帮助!

4

1 回答 1

0

解开谜团!据我所知,上面的代码是最快的图片下载方法。我还尝试将图像下载到内存流中,然后保存图像,就像 JohannesB 建议的那样(参见上面的评论)。正如他已经提到的,它在下载时间方面并没有太大的区别,但最终它帮助我发现大部分时间都花在了保存图像上。

保存时间长的原因是选择的文件位置。默认情况下,它指向 Environment.SpecialFolder.MyPictures。这是指向我的网络驱动器。当我选择本地驱动器时,22MPixel Jpeg 的保存时间降至 150 毫秒。

非常感谢你的帮助!

于 2014-07-23T08:17:30.733 回答