[英]Loading Canon .CR2 files in .NET
我正在嘗試使用 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);
只是掛起而沒有完成,也沒有引發任何異常。
有沒有人在這方面取得過任何成功?
申請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/docs/ReadRawImageFromCamera.md
nuget包安裝的詳細信息:
Install-Package Magick.NET-Q16-AnyCPU
我不相信 BitmapDecoder 理解 .CR2。 到目前為止,它不是傳統的圖像格式,因為它包含原始拜耳傳感器圖像(每個像素一種顏色),而不是標准圖像。
如果你想轉換CR2等camera raw格式,你應該看看DCRaw: http ://www.cybercom.net/~dcoffin/dcraw/或者libraw(基於dcraw,友好的作為一個庫): http:// www.libraw.org/
NuGet 包: Magick.NET-Q16-AnyCPU
private void ConvertToJpg(string path, string saveToFolder)
{
var filename = Path.GetFileName(path);
ImageFormat format = ImageFormat.Jpeg;
using (MagickImage magImg = new MagickImage(path))
{
magImg.Format = MagickFormat.Jpg;
magImg.Quality = 99;
magImg.Write($"{saveToFolder}\\{filename}.jpg");
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.