我目前正在對使用Drawing.Graphics提請我在圖片框中顯示位圖C#應用程序。我用網格渲染一個圖形,所以除了屏幕上的點數之外,我還得畫出大約200個網格線。我可以滾動來移動圖形,但是在這樣做的時候,我注意到我的繪圖函數在結尾時表現不佳。用OpenTK和它的GLControl類取代這種方法使得渲染效率非常高,滾動非常平滑。Drawing.Graphics表現不佳
有沒有什麼辦法讓從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
@Dmi,你能顯示一些代碼嗎?性能可能取決於您採取的方法,因此有助於獲得該類型的上下文。 – 2011-04-17 16:37:03
從位圖創建圖形,DrawLine x200,配置圖形。 :) – Dmi 2011-04-17 16:43:30
我曾經爲Windows Phone 7製作過硬件加速的System.Drawing.Graphics版本,但並不是最好的方法;除非你有一個很好的理由來重寫GDI +。 OpenTK的圖形處理方法很快,因爲它使用GPU加速。 – IDWMaster 2011-04-17 16:44:24