2017-03-28 3 views
1

私の目標は、Canon EOS 70DでキャプチャしたRAW画像を、Canon EDSDK 3.4を使用して.tifファイルに保存することです。このバージョンはRAW画像処理をサポートしています。EdsCreateImageRef()メソッドがEDS_ERR_FILE_FORMAT_UNRECOGNIZEDを返します

私の検索では、イメージオブジェクトをカメラから取得することができないため、イメージをホストPCにダウンロードしてから、ファイルを読み込んでさらに処理し、イメージを保存する必要があることがわかりましたメソッドEdsSaveImage()。これは私が持っているコードです。

 private uint HandleObjectEvent(uint CamEvent, IntPtr direcItem, IntPtr context) 
    { 
     uint err = EDSDK.EDS_ERR_OK; 
     string path; 
     if (_cameraCaptureFileName != null) 
     { 
      path = ConfigFile.ConfigParams[CAMERA_CAPTURE_PATH] + _getBaseDirName(_cameraCaptureFileName); 
     } 
     else 
      path = ConfigFile.ConfigParams[CAMERA_CAPTURE_PATH]; 

     string timeStamp = DateTime.Now.ToString(); 
     ThreadPool.QueueUserWorkItem((state) => 
     { 
      if (CamEvent == EDSDK.ObjectEvent_DirItemRequestTransfer) 
      { 
       IntPtr stream = IntPtr.Zero; 
       EDSDK.EdsDirectoryItemInfo dirItemInfo; 
       if (!Directory.Exists(path)) 
       { 
        Directory.CreateDirectory(path); 
       } 
       err = EDSDK.EdsGetDirectoryItemInfo(direcItem, out dirItemInfo); 
       if (_cameraCaptureFileName != null) 
       { 
        if (_isFileType(_cameraCaptureFileName, _imageType)) 
        { 
         dirItemInfo.szFileName = path + "\\" + _getFileName(_cameraCaptureFileName); 
        } 
        else 
         System.Windows.MessageBox.Show("Filename is not an Image type","File type", 
          System.Windows.MessageBoxButton.OK,System.Windows.MessageBoxImage.Warning); 
       } 
       else 
       { 
        dirItemInfo.szFileName = path + "\\" + dirItemInfo.szFileName; 
       } 
       err = EDSDK.EdsCreateFileStream(dirItemInfo.szFileName, EDSDK.EdsFileCreateDisposition.CreateAlways, 
        EDSDK.EdsAccess.ReadWrite, out stream); 
       err = EDSDK.EdsDownload(direcItem, dirItemInfo.Size, stream); 
       err = EDSDK.EdsDownloadComplete(direcItem); 
       EDSDK.EdsRelease(stream); 
       stream = IntPtr.Zero; 

       IntPtr instream = IntPtr.Zero; 
       IntPtr imgref = IntPtr.Zero; 
       err = EdsCreateFileStream(dirItemInfo.szFileName, EdsFileCreateDisposition.OpenExisting, EdsAccess.Read, out instream);     
       err = EdsCreateImageRef(instream, out imgref); 


      } 

     }); 
     return err; 
    } 

だから、コードの最後のセクションでは、私は私のPC上.CR2形式で画像を保存して、私はerr = EdsCreateImageRef(instream, out imgref);を使用しようとすると、その後EdsCreateFileStream(dirItemInfo.szFileName, EdsFileCreateDisposition.OpenExisting, EdsAccess.Read, out instream);

とを使用して、この.CR2ファイルストリームを読み取ろうImageオブジェクトを作成するには、エラーコードEDS_ERR_FILE_FORMAT_UNRECOGNIZEDと表示されます。私は理由を理解していません.に値がある場合は、RAW画像を.tifまたはJPEG形式で保存できます。私はJPEGファイルを読もうとしましたが、成功しました。しかし、JPEGを読むことは私には役に立たない。このために変更すべき設定があるかどうかを教えてください。

次のリンクのメソッドが何をしようとしています。しかしそれは失敗する。 がcanon SDk Article by Johannes Bildstein

答えて

0

EDS_ERR_FILE_FORMAT_UNRECOGNIZEDはおそらく64ビットのサポートでRAW変換サポートはベータ版でのみ新しいモデルのカメラであるという事実から生じる(〜2015年まで)。エラーメッセージは偽りですが、バックグラウンドでのDPPライブラリの動的ロードが失敗するという事実に起因する可能性があります。 70Dイメージを変換する場合は、32ビットモードで再コンパイルする必要があります。

関連する問題