2017-03-28 10 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 파일 스트림을 읽으려고 에러 코드가 EDS_ERR_FILE_FORMAT_UNRECOGNIZED라고하는 Image 오브젝트를 생성합니다. 이유를 모르겠다. imgref에 값이 있으면 RAW 이미지를 .tif 또는 JPEG 형식으로 만 저장할 수 있습니다. JPEG 파일을 읽으려고했는데 성공했습니다. 그러나 JPEG를 읽는 것은 나에게 유용하지 않습니다. 친절하게도 내가 바꾸어야 할 설정이 있는지 알려주세요.

다음 링크의 메소드가 수행하려고 시도한 것입니다. 그러나 그것은 실패합니다. 이 canon SDk Article by Johannes Bildstein

답변

0

EDS_ERR_FILE_FORMAT_UNRECOGNIZED 아마 64 비트를 지원하는 RAW 변환 지원은 베타 버전으로 만 새로운 모델 카메라 용이라는 사실에서 유래 (~ 2015 년까지). 오류 메시지는기만적인 것이지만 백그라운드에서 DPP 라이브러리의 동적로드가 실패한다는 사실에서 기인합니다. 70D 이미지를 변환하려면 32 비트 모드로 다시 컴파일해야합니다.