none
Как убрать мерцание и как решить ещё одну проблему? RRS feed

  • Вопрос

  • 1) Как убрать мерцание?

    2) При добавлении функции перерисовки рисунки получаются кривыми.

    Первый рисунок когда не было перерисовки:

    Рисунок после добавления перерисовки:

    18 августа 2012 г. 11:59

Ответы

  • Попробуйте воспользоваться следующим субклассом от Panel, проблемы с мерцанием точно должны пропасть:

    class MyPanel : Panel {
        public MyPanel() {
            this.DoubleBuffered = true;
            this.ResizeRedraw = true;
        }

    Соотвественно из Toolbox вам нужно будет добавлять не Panel, а MyPanel (должен появится в самом верху данный контрол

    Для связи [mail]

    • Помечено в качестве ответа Abolmasov Dmitry 6 сентября 2012 г. 7:16
    • Снята пометка об ответе Ziya Ceferov 7 сентября 2012 г. 13:35
    • Помечено в качестве ответа Ziya Ceferov 7 сентября 2012 г. 13:35
    4 сентября 2012 г. 13:39

Все ответы

  • 1) Мерцание убрать если только ввести эффект двойной и более буферизации.

    Мерцание вполне нормальный эффект.

    2) приведите код функции
    19 августа 2012 г. 4:47
  • когда студентом был, лабораторку делал такую,

    рисовать фигуры и линию кривую.
    ООП на C# называлось.
    Там много чего есть.
    Тоже на гди+ с буфферизацией.
    Правда там на форме рисовали, ну почти не важно.
    Разница только в том, что на панельке двойную буфферизацию включать или через наследование,
    или через отражение.

    Если надо, методичку скину куда-нибудь.


    • Изменено INFEL8 19 августа 2012 г. 6:12
    19 августа 2012 г. 6:11
  • Привет, можете выложить файлк на какой-нибудь файл хостинг, любой (можно skydrive если умеете, а так яндекс.диск, народ, маил.ру файлы, rghost и тп). Потому что щас ссылка на почту ведет. А лучше если код небольшой то привести его здесь, то как вы рисуете первоначально и то как происходит перерисовка.

    Спасибо.


    Для связи [mail]

    21 августа 2012 г. 11:32
  • можете выложить файлк на какой-нибудь файл хостинг  А лучше если код небольшой то привести его здесь

    Не качайте программу, вот следующий проблемный код, если сделать размер panel1 большим, то рисунок с перерисовкой получается кривым:

            public Form1()
            {
                InitializeComponent();
                bitmap1 = new Bitmap(panel1.Width, panel1.Height);
            }
    
            Graphics G;
            Pen P;
    
            Point point1;
            Point point2;
            Bitmap bitmap1;
    
            private void panel1_MouseMove(object sender, MouseEventArgs e)
            {
                G = Graphics.FromImage(bitmap1);
                P = new Pen(Color.Black, 1);
                Point point2 = new Point(e.X, e.Y);
                G.DrawLine(P, point1, point2);
                point1 = point2;
    
                panel1.Invalidate();
            }
    
            private void panel1_Paint(object sender, PaintEventArgs e)
            {
               e.Graphics.DrawImage(bitmap1, 0, 0);
            }

    1) Ссылку на информацию о буферизации можете дать?


    • Изменено Ziya Ceferov 23 августа 2012 г. 6:12
    21 августа 2012 г. 15:05
  • Попробуйте воспользоваться следующим субклассом от Panel, проблемы с мерцанием точно должны пропасть:

    class MyPanel : Panel {
        public MyPanel() {
            this.DoubleBuffered = true;
            this.ResizeRedraw = true;
        }

    Соотвественно из Toolbox вам нужно будет добавлять не Panel, а MyPanel (должен появится в самом верху данный контрол

    Для связи [mail]

    • Помечено в качестве ответа Abolmasov Dmitry 6 сентября 2012 г. 7:16
    • Снята пометка об ответе Ziya Ceferov 7 сентября 2012 г. 13:35
    • Помечено в качестве ответа Ziya Ceferov 7 сентября 2012 г. 13:35
    4 сентября 2012 г. 13:39