2010-11-30 14 views
2

私はカメラで撮影した画像を非常に長い時間取得しようとしていました。 SDKを使用して写真を撮ることができます:EDSDK 2.9を使用してCanonカメラから画像を取得する

err = EDSDK.EdsSendCommand(cameraDev、EDSDK.CameraCommand_TakePicture、0);

これは、有効なカメラセッションを開いた後に行います。私は(この画像を取得するために)それらのどれも動作するようには思えません複数のアプローチを試してみました

public static uint stateEventHandler(uint inEvent, uint inParameter, IntPtr inContext) 
    { 
     switch (inEvent) 
     { 
      case EDSDK.StateEvent_JobStatusChanged: 
       Debug.WriteLine(String.Format("There are objects waiting to be transferred. Job status {0}", inParameter)); 
       break; 

      case EDSDK.StateEvent_ShutDownTimerUpdate: 
       if (inParameter != 0) 
        Debug.WriteLine(String.Format("shutdown timer update: {0}", inParameter)); 
       break; 

      default: 
       Debug.WriteLine(String.Format("StateEventHandler: event {0}, parameter {1}", inEvent, inParameter)); 
       break; 
     } 
     return 0; 
    } 

​​

:私はまた、次のようになり、イベントのために

objectEventHandlerとstateEventHandlerを追加しました。 アプローチのいくつかは、次のとおりです。

http://tech.groups.yahoo.com/group/CanonSDK/message/1575

[http://stackoverflow.com/questions/3762530/take-picture-and-directly-save-image-to-pc-using-edsdk-2 -8]

[http://canonsdk.com/phpBB3/viewtopic.php?f=7 & T = 94 & SID = 7fcbe7ad6eadb399dbcb4b61a7333112]

ものは、それらのすべては、コードのほんの一部であります、私はそれを私の中に入れようとすると、 は正しく動作しません。私は経験がないのでおそらくメモリースティック上では、ポインタはそうです。 私が得るエラーの大部分は、ストリームを読み込んでローカルバッファにコピーするときに、ストリームが空であると言います。

写真を撮ってディスク(またはメモリ)にダウンロードするための完全なサンプルコードがありますか?これを完了するために必要なリグなアプローチですか?ハードディスクにキャプチャ画像をダウンロード

おかげ フェルナンド

+1

あなたはC++に切り替えたいですか? – rossb83

答えて

0

ファイルとして、あなたは

void DownloadImage(IntPtr DirectoryRef) 
{ 
    IntPtr stream = IntPtr.Zero; 

    try 
    { 
     Error = EDSDK.EdsGetDirectoryItemInfo(DirectoryRef, out dirItemInfo); 

     if (Error == OK) 
     { 
      Error = EDSDK.EdsCreateFileStream(dirItemInfo.szFileName, 
      EDSDK.EdsFileCreateDisposition.CreateAlways, EDSDK.EdsAccess.ReadWrite, out stream); 
     } 

     if (Error == OK) 
     { 
      Error = EDSDK.EdsDownload(DirectoryRef, dirItemInfo.Size, stream); 
     } 

     if (Error == OK) 
     { 
      Error = EDSDK.EdsDownloadComplete(DirectoryRef); 
     } 
     else 
     { 
      Error = EDSDK.EdsDownloadCancel(DirectoryRef); 
     } 

     Error = EDSDK.EdsGetPointer(stream, out data); 
     if (Error != OK) 
       throw new Exception("Invalid Pointer Handler. Error Code:" + err.getErrorName(Error) + "(" + Error + ")"); 

     Error = EDSDK.EdsGetLength(stream, out size); 

     Bitmap retImage = null; 
    } 
    catch (Exception ex) 
    { 

    } 

    EDSDK.EdsRelease(stream); 
    EDSDK.EdsRelease(data);    
} 
1

を、それをチェックアウトすることができ、あなたのコード内のエラーは、次のとおりです。

downloadImage(inContext); 

それはすべきbe

downloadImage(inRef); 
関連する問題