내 목표는 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