Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/88: Рейтинг темы: голосов - 88, средняя оценка - 4.82
 Аватар для RiG1
28 / 28 / 4
Регистрация: 12.03.2011
Сообщений: 474

Убрать мигание при перерисовке изображения

20.06.2011, 13:17. Показов 19188. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеется такой код перерисовки изображения
C#
1
2
3
4
5
6
7
8
9
10
11
private void timer1_Tick(object sender, EventArgs e)
        {
            Graphics rg = pictureBox3.CreateGraphics();
           
            rg.DrawEllipse(Pens.White, a, b, 20, 20);
 
 
 
            rg.DrawEllipse(Pens.Red, a, b, 20, 20);
 
        }
интервал таймера 50 мсек и изображение "мигает". Подскажите на данном примере как это исправить.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.06.2011, 13:17
Ответы с готовыми решениями:

Как убрать мерцание формы при перерисовке?
у меня в бекграундвокере каждую миллисекунду перерисовывается интерфейс прям на форме и мерцает капец, перепробовал дафига всяких штучек, и...

Убрать мерцание изображения при движении большого количества обьектов
что сделать, что бы не мигало изображении и при большом количестве объектов не вылетало с ошибкой,что делать что бы цвета были разные...

Мигания при перерисовке формы
Добрый день. Создаю простенький текстовый редактор. На разных этапах разработки бывало такое, что при сворачивании/разворачивании формы...

10
Level 2
 Аватар для FakiR
401 / 275 / 48
Регистрация: 22.11.2010
Сообщений: 785
Записей в блоге: 1
20.06.2011, 14:12
поставь в свойствах формы DoubleBuffered = true, может поможет...
PS - у меня твой код не мерцает, у тебя наверно машина слабее...
0
 Аватар для RiG1
28 / 28 / 4
Регистрация: 12.03.2011
Сообщений: 474
20.06.2011, 15:39  [ТС]
Пробовал, не помогло. Гуглил на счет BufferedGraphics но ничего не понял

Добавлено через 1 час 22 минуты
ап ап ап
0
 Аватар для ][irurg
181 / 180 / 38
Регистрация: 16.06.2010
Сообщений: 511
20.06.2011, 15:59
Так лучше работает? Сам в шоке, не могу красиво сделать элементарные вещи.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms; 
 
namespace GraphicsForm
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
            int a = 10;
            int b = 10;
                   
        private void timer1_Tick(object sender, EventArgs e)
        {
            a++;
            b++;
            pictureBox1.Invalidate();        
        }
 
        private void pictureBox1_Paint(object sender, PaintEventArgs e)
        {
            Graphics rg = e.Graphics;
            rg.FillEllipse(Brushes.Blue, a, b, 40, 40);          
        }        
    }
}
2
 Аватар для RiG1
28 / 28 / 4
Регистрация: 12.03.2011
Сообщений: 474
20.06.2011, 16:39  [ТС]
][irurg, огромное спасибо, то что надо
0
185 / 188 / 17
Регистрация: 26.11.2010
Сообщений: 511
20.06.2011, 17:25
Скажите, кто вас учил методу CreateGraphics?!
Нет ничего медленнее и ужаснее этого метода для рисования.
0
 Аватар для RiG1
28 / 28 / 4
Регистрация: 12.03.2011
Сообщений: 474
20.06.2011, 17:30  [ТС]
Killster, подскажете что-то другое?
0
185 / 188 / 17
Регистрация: 26.11.2010
Сообщений: 511
20.06.2011, 17:39
Цитата Сообщение от RiG1 Посмотреть сообщение
Killster, подскажете что-то другое?
OnPaint и e.Graphics
Ещё лучше рисовать на PictureBox.Image
Тогда
C#
1
g=Graphics.FromImage(pict.Image);
1
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
03.07.2019, 14:12
Решение с другого форума:
ставить нужно перед строчкой InitializeComponent()
C#
1
2
SetStyle(ControlStyles.AllPaintingInWmPaint, true);
SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
в свойствах формы DoubleBuffered поставить false
0
 Аватар для Sanya_sa
912 / 816 / 333
Регистрация: 03.02.2015
Сообщений: 5,276
Записей в блоге: 9
04.07.2019, 17:49
RiG1, и еще желательно перерисовывать только тот "кусок", который изменился, зоны отрисовки за раннее расчитывть и вызывать не Invalidate(), а одну из его перегрузок. Еще как пишет MSDN чрезмерное создание и удаление (в OnPaint) кистей перьев и тд то же сказывается на скорости отрисовки.

Ну и если прямо уж ваще будет все мерцать тогда можно поэкспериментировать => https://habr.com/ru/post/164885/
0
 Аватар для Dr_FvKE
14 / 11 / 1
Регистрация: 16.08.2016
Сообщений: 75
25.10.2021, 13:06
Думаю, уже не актуально, но вдруг кто-то будет искать – просто оставлю это здесь.
В код формы вставьте:

C#
1
2
3
4
5
6
7
8
9
protected override CreateParams CreateParams
{
    get
    {
        CreateParams handleParam = base.CreateParams;
        handleParam.ExStyle |= 0x02000000;   // WS_EX_COMPOSITED       
        return handleParam;
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.10.2021, 13:06
Помогаю со студенческими работами здесь

Мерцание формы при перерисовке
после каждого хода идет прорисовка поля и сопровождается мерцанием. даблбуфер не помогает... namespace soft { public partial...

Ошибка при перерисовке прямоугольника
Задача - при нажатию на кнопку включить таймер, в обработчике события которого должна выполняться функция Move, которая перемещает...

Мерцает изображение при перерисовке
Прочитал много тем по данному вопросу, 2 способа включения двойной буферизации не помогли, но так и не понял, в чем проблема using...

Как избежать мерцания при перерисовке Panel
Необходимо чтобы после того, как загнал все точки в список (List), их отрисовало на panel. Причем так, чтобы "не моргала" панель....

Рисование графиков: при перерисовке остаются точки
Здравствуйте! При написании своей библиотеки построения функции. Столкнулся с проблемкой, когда при перерисовке функции остаются маленькие...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru