2017-03-28 4 views
1

Mon objectif est de sauvegarder les images RAW capturées par Canon EOS 70D dans un fichier .tif à l'aide de Canon EDSDK 3.4 pour une application WPF Il a été mentionné que cette version prend en charge le traitement d'image RAW. De ma recherche, j'ai découvert qu'il n'est pas possible d'obtenir l'objet image de la caméra, donc vous devez d'abord télécharger l'image sur le PC hôte, puis essayer de lire le fichier pour un traitement ultérieur et enregistrer l'image en utilisant la méthode EdsSaveImage(). C'est le code que j'ai.La méthode EdsCreateImageRef() donne EDS_ERR_FILE_FORMAT_UNRECOGNIZED

 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; 
    } 

Ainsi, dans la dernière section du code I enregistrer une image au format .CR2 sur mon PC et j'essaie de lire ce flux de fichier CR2 en utilisant EdsCreateFileStream(dirItemInfo.szFileName, EdsFileCreateDisposition.OpenExisting, EdsAccess.Read, out instream);

et puis quand je tente d'utiliser err = EdsCreateImageRef(instream, out imgref); Pour créer un objet Image, le code d'erreur indique EDS_ERR_FILE_FORMAT_UNRECOGNIZED. Je ne comprends pas pourquoi. Je ne peux enregistrer l'image RAW au format .tif ou JPEG que si le imgref a une certaine valeur. J'ai essayé de lire un fichier JPEG et cela a réussi. Mais lire un JPEG ne me sert à rien. Veuillez me faire savoir s'il y a un paramètre que je devrais changer pour cela.

La méthode dans le lien suivant est ce que j'essaie de faire. Mais ça échoue. canon SDk Article by Johannes Bildstein

Répondre

0

Le EDS_ERR_FILE_FORMAT_UNRECOGNIZED provient probablement du fait que le soutien de conversion RAW dans le support 64 bits est en version bêta et seulement pour les caméras de modèles plus récents (~ 2015 et plus). Le message d'erreur est trompeur, mais provient probablement du fait que le chargement dynamique des bibliothèques DPP en arrière-plan échoue. Si vous voulez convertir des images 70D, vous devriez recompiler en mode 32 bits.