在.NET中加载Canon .CR2文件

我正在尝试使用C#处理Canon RAW .CR2文件。 我的代码如下:

BitmapDecoder bmpDec = BitmapDecoder.Create(new Uri(origFile), BitmapCreateOptions.DelayCreation, BitmapCacheOption.None); BitmapEncoder bmpEnc = new BmpBitmapEncoder(); bmpEnc.Frames.Add(bmpDec.Frames[0]); Stream ms = new MemoryStream(); bmpEnc.Save(ms); Image srcImage = Bitmap.FromStream(ms); 

前几行似乎毫无障碍地运行,但线路

 bmEnc.Save(ms); 

只是挂起而没有完成,也没有提出任何例外。

有人有这个成功吗?

我不相信BitmapDecoder理解.CR2。 到目前为止,它不是传统的图像格式,因为它包含原始的拜耳传感器图像(每个像素一种颜色),而不是标准图像。

如果你想转换CR2和其他相机原始格式,你应该看看DCRaw: http ://www.cybercom.net/~dcoffin/dcraw/或libraw(基于dcraw,友好的库): http:// http://www.libraw.org/

应用https://www.microsoft.com/en-us/download/details.aspx?id=26829之后的W8.1或W7似乎运行良好

 var files = Directory.GetFiles(@"D:\DCIM","*.CR2"); for(var i = 0; i < files.Length; i++) { Console.Write("{0,-4}: {1} => ", i, files[i]); var bmpDec = BitmapDecoder.Create(new Uri(files[i]), BitmapCreateOptions.DelayCreation, BitmapCacheOption.None); var bmpEnc = new JpegBitmapEncoder(); bmpEnc.QualityLevel = 100; bmpEnc.Frames.Add(bmpDec.Frames[0]); var oldfn = Path.GetFileName(files[i]); var newfn = Path.ChangeExtension(oldfn, "JPG"); using(var ms = File.Create(Path.Combine(@"D:\DCIM\100CANON", newfn), 10000000)) { bmpEnc.Save(ms); } Console.WriteLine(newfn); } 

知道这是一个老线程,但我发现一个很好用的(Magick.NET)

怎么做转换

 using (MagickImage image = new MagickImage("StillLife.CR2")) { image.Write("StillLife.jpg"); } 

https://github.com/dlemstra/Magick.NET/blob/master/Documentation/ReadRawImageFromCamera.md

nuget包安装的详细信息

安装包Magick.NET-Q16-AnyCPU

https://github.com/dlemstra/Magick.NET