[英]Loading bitmap takes too long time
我在執行調整大小,drawString和FillEllipse
。
有很多要顯示n
位圖的點(FillEllipse),所以我使用了for
循環。
這是代碼:
using (System.Drawing.Graphics Gfx = System.Drawing.Graphics.FromImage(OrginalBitmap))
{
Gfx.SmoothingMode = SmoothingMode.HighQuality;
Gfx.CompositingQuality = CompositingQuality.HighQuality;
Gfx.InterpolationMode = InterpolationMode.HighQualityBicubic;
Gfx.PixelOffsetMode = PixelOffsetMode.HighQuality;
foreach (var points in SelectedPoints)
{
Gfx.FillEllipse(
Brushes.Yellow,new Rectangle(points.X , points.Y, 8, 8));
Gfx.DrawString("M", new Font("Arial",8),
Brushes.Yellow, points.X, points.Y);
//points.X and points.X are the points that needs to be drawn on bitmap(particular location).
}
}
((IDisposable)OrginalBitmap).Dispose;
如果SelectedPoints中有很多點,則加載繪制的位圖將花費很長時間。 性能急劇下降,加載占用太多內存。 請讓我知道該怎么辦。
提前致謝。
即使僅在最高質量的設置下,僅繪制200點也不應該引起任何性能問題。 使用您的代碼,我可以在一秒鍾內在系統上繪制約40000點。
假設SelectedPoints是Point[]
或List<Point>
或某些其他有效類型,我會懷疑FontFacade.Large
調用。 是否每次都創建一個新的Font實例?
編輯:
在我的系統上,使用new Font("Arial", 8)
在200點上運行修改后的代碼大約需要20毫秒,因此必須有其他原因導致您的問題。 在系統上運行代碼需要多長時間?
Stopwatch timer = Stopwatch.StartNew();
[...]
Debug.WriteLine(timer.ElapsedMilliseconds);
創建的字體對象應該在完成后進行處理,我也將其移出循環,以便僅創建一個實例,盡管這似乎不是問題的根源。
using(Font font = new Font("Arial", 8))
{
foreach(var point = SelectedPoints)
{
[...]
}
}
什么是OriginalBitmap尺寸,什么是PixelFormat?
SelectedPoints是什么類型?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.