私の目標は、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