2015-07-21 53 views
2

]的圖像大小目前,我們正在確定的大小,以及是否圖像包含顏色通過將其轉換爲Bitmap和檢查height/width,並檢查PixelFormat的類型System.Drawing.Imaging.PixelFormat.Format1bppIndexed以檢測顏色。最快的方法來檢測A)顏色和B)從字節[

什麼我雖然注意到,單步調試代碼,它可能需要3-5秒的時間來初始化這個Bitmap(至少在一個非常高的分辨率TIF圖片):

ms = new MemoryStream(fileBytes); 
bitmap = new System.Drawing.Bitmap(ms); 

有一個更快的方法來檢查這兩件事,直接從字節數組中,所以我可以避免Bitmap類的緩慢或這正是大TIF圖像所期望的?

+0

想必您可以深入研究'tiff'文件格式並找出如何讀取標題並提取您所需的信息。 –

+0

感謝您的答覆 - 我也曾考慮過這個問題,但我遠不是一個影像專家,甚至不知道從哪裏開始。 – lhan

+0

我絕不是一個專家,但是看起來[這裏](http://www.fileformat.info/format/tiff/egff.htm)看起來像任何地方開始一樣好。它看起來像你需要閱讀標題,這將告訴你在哪裏可以找到「圖像文件目錄」,並且應該包含大小和顏色深度的標籤。 –

回答

0

這並不是我所希望的答案,所以我會保持開放,但我至少要提一個可能的「答案」。我原來的問題是加載Bitmap很慢。

我偶然發現this MSDN article,它解釋瞭如何讓Image.FromStream()有一個重載,讓你告訴它不要驗證圖像數據。默認情況下,設置爲true。通過使用這種新的過載,並將validateImageData設置爲false - 這可以大大提高速度。

因此,例如:

using (FileStream fs = new FileStream(this.fileInfo.FullName, FileMode.Open, FileAccess.ReadWrite)) 
{ 
    using (Image photo = Image.FromStream(fs, true, false)) 
    { 
     // do stuff 
    } 
} 

文章的作者,發現他的代碼運行更快的93X(!)。

相關問題