2010-11-06 20 views
0

我正在嘗試使用C#處理Canon RAW .CR2文件。我的代碼如下:在.NET中加載Canon .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); 

只是掛起沒有完成,並沒有提出任何例外。

有沒有人有這方面的成功?

回答

0

我不相信BitmapDecoder理解.CR2。它不是傳統的圖像格式,因爲它包含原始拜耳傳感器圖像(每個像素一種顏色),而不是標準圖像。

如果你想CR2和其他相機原始格式轉換,你應該看看Dcraw執行:http://www.cybercom.net/~dcoffin/dcraw/或libraw(基於dcraw的,友好的圖書館):http://www.libraw.org/

+0

我不認爲任何人寫的.NET包裝libraw?只是一個想法... – 2010-11-06 06:34:17

+0

好吧,現在寫的.NET包裝。如果我能得到它防彈我會張貼在某個地方供公衆消費。 – 2010-11-09 11:53:32

+0

或者希望在那之前呢?我很想擁有這個包裝... – 2012-06-21 16:49:15

4

W8.1或W7採用https://www.microsoft.com/en-us/download/details.aspx?id=26829似乎後運行良好

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); 
      } 
+0

使用(var ms = File.Create(Path.Combine(@「D:\ DCIM \ 100CANON」,newfn),10000000))。 。 。 。在「文件」字上出現錯誤: 'Controller.File(byte [],string)'是一種方法,在給定的上下文中無效 – JustJohn 2017-03-27 13:46:05

+0

好的,我必須添加「System.IO」。儘管使用System.IO已經在頁面的頂部,但在「文件」一詞的前面。 「之所以這樣,是因爲你正在編寫一個控制器動作的代碼,這個動作已經在Controller類上定義了一個File方法。」 http://stackoverflow.com/questions/16188314/why-cant-i-use-system-io-file-methods-in-an-mvc-controller – JustJohn 2017-03-27 14:47:54

+0

從2014年或2015年以來,微軟的編解碼器沒有更新。所以,它不支持較新的相機。可能需要安裝每個製造商(例如尼康)的個別編解碼器,這不太理想 – 2017-12-11 13:11:29