我有這段代碼運行它所做的是流RDLC文件,將其轉換爲圖像並保存它。該流是在手之前創建並保存在內存中的。 我面臨的問題是這個功能非常慢。它需要2-3秒才能執行。 執行此線需要大部分時間更快的圖形DrawImage
graphics.DrawImage(imge, adjustedRect);
最大。我怎樣才能讓它更快,請幫助。
public void PrintImagePage(int PageNo)
{
try
{
Metafile imge;
Graphics graphics;
Image pageImage;
PageNo = PageNo - 1;
if (m_streams == null || m_streams.Count == 0)
throw new Exception("Error: no stream to print.");
m_streams[PageNo].Position = 0;
string filePath = _folderPath + _fileNamePrifix + PageNo + ".png";
imge = new Metafile(m_streams[PageNo]);
pageImage = new Bitmap(imge.Width, imge.Height);
graphics = Graphics.FromImage(pageImage);
Rectangle adjustedRect = new Rectangle(
0,
0,
pageImage.Width,
pageImage.Height);
graphics.FillRectangle(Brushes.White, adjustedRect);
// Draw the report content
graphics.DrawImage(imge, adjustedRect);
pageImage = ResizeBitmap(pageImage, .35f, InterpolationMode.HighQualityBicubic);
pageImage.Save(filePath, ImageFormat.Png);
//using (var m = new MemoryStream())
//{
// pageImage.Save(filePath, ImageFormat.Png);
// var img = Image.FromStream(m);
// img.Save(filePath);
// img.Dispose();
//}
imge.Dispose();
graphics.Dispose();
pageImage.Dispose();
}
catch (Exception)
{
throw;
}
}
我記得這個功能只是照明很快。你在處理非常大的圖像嗎? – Naruil
是的原始圖像非常大。那爲什麼我在保存之前調整它大小 – thewayman
只是不要調整大小。首先創建合適的大小,並將您的循環保存到DrawImage()中。獲得像素格式匹配非常重要。如果你想要更快,那麼你需要解決更小的插值模式。 –