我正在創建一個過程來提取TIFF,對其中一個圖像執行操作,然後重新生成TIFF。中間的操作並不重要,然而,提取和重建在處理方面證明是非常昂貴的。如何優化此代碼以創建TIFF文件和/或應考慮哪些備用庫來提高性能?
const string tifPath = "14 page.TIFF";
MemoryStream[] imageStreams;
var stream = new MemoryStream();
//extract tiff
using (var imageFile = Image.FromFile(tifPath))
{
var imagePageCount = imageFile.GetFrameCount(FrameDimension.Page);
imageStreams = new MemoryStream[imagePageCount];
var frameDimension = new FrameDimension(imageFile.FrameDimensionsList[0]);
for (var i = 0; i < imagePageCount; i++)
{
imageFile.SelectActiveFrame(frameDimension, i);
var bmp = new Bitmap(imageFile);
bmp.Save(stream, ImageFormat.Bmp);
imageStreams[i] = stream;
}
}
//build tiff
var encoder = Encoder.SaveFlag;
var encoderInfo = ImageCodecInfo.GetImageEncoders().First(i => i.MimeType == "image/tiff");
var encoderParameters = new EncoderParameters(1);
encoderParameters.Param[0] = new EncoderParameter(encoder, (long)EncoderValue.MultiFrame);
stream = new MemoryStream();
var firstImage = new Bitmap(Image.FromStream(imageStreams[0]));
firstImage.Save(stream, encoderInfo, encoderParameters);
encoderParameters.Param[0] = new EncoderParameter(encoder, (long)EncoderValue.FrameDimensionPage);
for (var i = 1; i < imageStreams.Length; i++)
{
var img = Image.FromStream(imageStreams[i]);
firstImage.SaveAdd(img, encoderParameters);
}
encoderParameters.Param[0] = new EncoderParameter(encoder, (long)EncoderValue.Flush);
firstImage.SaveAdd(encoderParameters);
我發現在某些地方清理我的流有幫助。與微軟和其他圖書館(LeadTools和LibTiff)平均約5秒。我沒有設置使用C#解決方案,但試圖找到一種方法儘可能地壓縮它。
和你的問題是? – JohnFx
如何使當前代碼更快。使用庫來代替GDI +。 – Jeremy
@ liori:我不是在尋求一個簡單的意見。我正在尋找速度非常緩慢的過程。我知道圖像處理的成本很高,但是我從Google找到的所有多頁TIFF信息都只涉及如何處理這些信息。 – Jeremy