繁体   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