加载位图需要很长时间
本文关键字:长时间 位图 加载 | 更新日期: 2023-09-27 18:31:27
我有一个图像,我正在做调整大小,绘制字符串和FillEllipse
。
有很多点(FillEllipse)需要显示在位图中n
所以我正在使用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;
如果选定点中有许多点,则加载绘制的位图需要很长时间。性能急剧下降,加载占用了太多内存。请让我知道该怎么做。
提前谢谢。
即使在最高质量设置下,仅绘制 200 个点也不应该导致任何性能问题。使用您的代码,我可以在我的系统上一秒钟内绘制大约 40000 个点。
假设 SelectedPoints 是Point[]
或List<Point>
或其他一些有效的类型,我会怀疑FontFacade.Large
调用。是否每次都会创建新的字体实例?
编辑:
在我的系统上,使用 200 个点的 new Font("Arial", 8)
运行修改后的代码大约需要 20 毫秒,因此一定有其他原因导致您的问题。在您的系统上运行代码需要多长时间?
Stopwatch timer = Stopwatch.StartNew();
[...]
Debug.WriteLine(timer.ElapsedMilliseconds);
创建的字体对象应在完成后处理,我也会将其移出循环,以便只创建一个实例,尽管这似乎不是问题的根源。
using(Font font = new Font("Arial", 8))
{
foreach(var point = SelectedPoints)
{
[...]
}
}
OriginalBitmap是什么维度,PixelFormat是什么?
选择点是什么类型?