0

C# EDSDK を使用して、Canon カメラ用のカメラ コントローラー アプリケーションを作成しました。画像をホスト PC にダウンロードすることはできますが、キヤノンの EOS ユーティリティ ソフトウェアに比べてまだ時間がかかります。現在、22 メガピクセルの Jpg 画像を約 2.5 秒でダウンロードしています。Canons ソフ​​トウェアを使用すると、1 秒もかかりません。RAW 画像 (22MPixel) の場合、Canons Utility Software で約 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());

    }

画像のより高速なダウンロード ルーチンについて知っている人はいますか? それとも、Canon は自社のソフトウェアでまったく異なるルーチンを使用していますか?

よろしくお願いします。

4

1 に答える 1

0

謎を解いた!上記のコードは、私が知る限り、画像の最速のダウンロード方法です。JohannesBが提案したように、画像をメモリストリームにダウンロードしてから保存しようとしました(上記のコメントを参照)。彼がすでに述べたように、ダウンロード時間に関しては大きな違いはありませんが、最終的には、ほとんどの時間が画像の保存に費やされていることがわかりました。

保存時間が長い理由は、選択したファイルの場所にありました。デフォルトでは、Environment.SpecialFolder.MyPictures を指していました。これは私のネットワークドライブを指していました。ローカル ドライブを選択すると、22MPixel JPEG の保存時間が 150 ミリ秒に短縮されました。

助けてくれてどうもありがとう!

于 2014-07-23T08:17:30.733 に答える