none
BitBlt мерцание картинки (C# , GDI) RRS feed

  • Вопрос

  • Необходимо реализовать перетаскивание картинки на собственном контроле. Сразу использовал DrawImageUnscaled в событии OnPaint (OnPaint срабатывает после вызова Invalidate(ClientRectangle); в событии OnMouseMove) - получалось хорошо, но медленно, решил использовать BitBlt (в том же самом месте что и DrawImageUnscaled, при этом все необходимые хэндлы получаю в начале перетаскиния, разрушаю в самом конце в событии OnMouseUp) - скорость возросла, но появилось просто огромное мерцание (в конструкторе я делаю
    SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer | ControlStyles.UserPaint, true);
    base.DoubleBuffered = true;
    ). Помогите, пожалуйста, решить эту проблему.
    13 июля 2011 г. 18:28

Ответы

  • Здравствуйте.

    Созадйте таймер и перемещайте изображение по нему, а не по каждому событию MouseMove. Это снизит мерцание и увеличит производительность.

    Также возможно имеет смысл разместить перемещаемое изображение в PictureBox и двиграть уже его.

     


    Для связи [mail]
    • Помечено в качестве ответа Abolmasov Dmitry 20 июля 2011 г. 10:18
    15 июля 2011 г. 9:17

Все ответы

  • Здравствуйте.

    Созадйте таймер и перемещайте изображение по нему, а не по каждому событию MouseMove. Это снизит мерцание и увеличит производительность.

    Также возможно имеет смысл разместить перемещаемое изображение в PictureBox и двиграть уже его.

     


    Для связи [mail]
    • Помечено в качестве ответа Abolmasov Dmitry 20 июля 2011 г. 10:18
    15 июля 2011 г. 9:17
  • Уважаемый пользователь!

    В вашей теме отсутствует активность в течение последних 5 дней. При отсутствии каких-либо действий в течение 2 последующих дней, тема будет переведена в разряд обсуждений. Вы можете возобновить дискуссию, просто оставив сообщение в данной теме


    Для связи [mail]
    19 июля 2011 г. 5:05
  • В С# не силен, поэтому извиняйте... Пишу на VB... Делаю так:

    В MouseMove беру координаты (e.X и e.Y), нажатие кнопки , а также вызываю Refresh() , а в ..._Paint отрисовывается через e.Graphics.DrawImage(...) картинка по нужным координатам.


    Alexandr_Smirnoff
    • Предложено в качестве ответа Alexandr_Smirnoff 20 августа 2011 г. 16:13
    20 августа 2011 г. 16:13