В настоящее время я работаю над приложением C #, которое использует Drawing.Graphics для рисования в растровом изображении, которое я отображаю в графическом окне.Я рендерил график с сеткой, поэтому мне нужно нарисовать около 200 линий сетки в дополнение к количеству точек на экране.Я могу прокручивать, чтобы перемещаться по графику, но при этом я замечаю, что моя функция рисования имеет низкую производительность, поскольку она заикается.Замена этого подхода на OpenTK и его класс GLControl делает рендеринг настолько эффективным, что прокрутка становится очень плавной.
Есть ли способ получить более высокую производительность из Drawing.Graphics?
// This is only done when the window is resized
Bitmap bmp = new Bitmap(picRender.Width, picRender.Height);
Graphics g = Graphics.FromImage(bmp);
// Drawing code
g.Clear(picRender.BackColor);
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighSpeed;
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.Bilinear;
if (background != null)
{
g.DrawImage(background, new Rectangle(0, 0, picRender.Width, picRender.Height));
}
for (int n = 0; n < trajectories.Count; n++)
{
Trajectory trajectory = trajectories[n];
Pen pen = new Pen(new SolidBrush(TrajectoryColors[n % TrajectoryColors.Length]));
if (RenderLines)
{
for (int i = 0; i < trajectory.samples.Count - 1; i++)
{
if (Interval_Start > trajectory.samples[i + 1].time ||
Interval_End < trajectory.samples[i].time) { continue; }
g.DrawLine(pen, coordinate_system.ToPoint(trajectory.samples[i].coordinates),
coordinate_system.ToPoint(trajectory.samples[i + 1].coordinates));
}
}
}
// End of drawing