簡體   English   中英

加載位圖花費的時間太長

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM