我知道自从提出这个问题以来已经有一段时间了,但它仍然可能对某人有所帮助。
要使用 SDK 处理 Canon 原始文件,您必须执行以下操作:
uint err;
//Create input stream
IntPtr inStream;
err = EDSDK.EdsCreateFileStream("Test.CR2", EDSDK.EdsFileCreateDisposition.OpenExisting, EDSDK.EdsAccess.Read, out inStream);
//Create image reference
IntPtr imgRef;
err = EDSDK.EdsCreateImageRef(inStream, out imgRef);
//Set properties
err = EDSDK.EdsSetPropertyData(imgRef, EDSDK.PropID_WhiteBalance, 0, 4, EDSDK.WhiteBalance_Cloudy);
//TODO: set any imageRef compatible property you need here.
//Create output stream
IntPtr outStream;
err = EDSDK.EdsCreateFileStream("TestOut.jpg", EDSDK.EdsFileCreateDisposition.CreateAlways, EDSDK.EdsAccess.Write, out outStream);
//Get image info
EDSDK.EdsImageInfo info;
err = EDSDK.EdsGetImageInfo(imgRef, EDSDK.EdsImageSource.FullView, out info);
//Set image settings
EDSDK.EdsSaveImageSetting set = new EDSDK.EdsSaveImageSetting();
set.JPEGQuality = 9;
//Save image
err = EDSDK.EdsSaveImage(imgRef, EDSDK.EdsTargetImageType.Jpeg, set, outStream);
//Release data
EDSDK.EdsRelease(imgRef);
EDSDK.EdsRelease(inStream);
EDSDK.EdsRelease(outStream);
当然,您不必从高清读取文件,还可以使用从相机获得的图像参考。
另一种无需 SDK 即可获取预览图像的方法是读取 CR2 本身。它基本上只是一个 Tiff 文件,它存储一个 jpg 缩略图 (160x120) 和两个稍大一点的 RGB 图像。该网站提供了有关整个 CR2 格式的一些有用信息:http://lclevy.free.fr/cr2/ http://lclevy.free.fr/cr2/
亲切的问候