@MinasM

Как увеличить скорость прорисовки в C#?

Ради интереса и освоения C# пытаюсь реализовать шахматную доску(на все величину формы, а форма у меня на весь экран) средствами рисования на форме, но результат не очень радует - заметно как шахматная доска прорисовывается в процессе загрузки.
Как можно убыстрить это? Есть ли какие либо более быстрые способы прорисовки

private void DrawRectangle(int x0, int y0, int x1, int y1, string colohtml)
        {
            label1.Visible = false;

            SolidBrush myBrush = new SolidBrush(ColorTranslator.FromHtml(colohtml));
            Graphics formGraphics;
            formGraphics = this.CreateGraphics();
            formGraphics.FillRectangle(myBrush, new Rectangle(x0, y0, x1, y1));
            myBrush.Dispose();
            formGraphics.Dispose();


        }



        private void shahmatSmall()
        {
            int h, w, h1, w1, X, Y, kolg, kolh;
            h = this.Height;
            w = this.Width;
            kolg = w / 20;
            kolh = h / 20;

            for (c = 1; c <= kolg+20; c=c+1)
            {
                for (d = 1; d <= kolh+20; d=d+1)
                    {
                        X = c*20;
                        Y = d * 20;
                             if ((c+d)%2==0) 
                                {
                                    DrawRectangle(X - 20, Y - 20, X, Y, "#000000");
                                    
                                }
                             else 
                                {
                                     DrawRectangle(X - 20, Y - 20, X, Y, "#FFFFFF");
                                    
                                }
                    }          
            }
  • Вопрос задан
  • 677 просмотров
Решения вопроса 1
Rou1997
@Rou1997
Переделайте код, вот это все должно делаться только 1 раз:
SolidBrush myBrush = new SolidBrush(ColorTranslator.FromHtml(colohtml));
            Graphics formGraphics;
            formGraphics = this.CreateGraphics();
            
            myBrush.Dispose();
            formGraphics.Dispose();

Еще можете использовать двойную буферизацию, тогда отрисовки не будет видно, она будет происходить в памяти, затем готовое изображение перерисуется на форму, а если графика в программе вообще "тяжелая", то имеет смысл DirectX/OpenGL или WPF (DirectX).
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы