Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.76/21: Рейтинг темы: голосов - 21, средняя оценка - 4.76
Now I Matrix
137 / 134 / 28
Регистрация: 01.03.2010
Сообщений: 223

Избавиться от мигания при рисовании

03.12.2010, 11:08. Показов 4625. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте...делаю...ну вобщем не важно что делаю.
Смысл в том что на весь экран растягивается чёрная форма и на ней компонент PaintBox (тоже на весь экран, название pb).
На него рисуется...очень много что рисуется..и ещё спиралька (на весь экран)...но при рисовании чего угодно, всё это противно маргает, мигает и всё остальное...как избаиваться от миргания и рисовать плавно?
(Borland C++ Builder 6).

рисую спиральку:

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
int spiral_angle=0,spiral_col=0;
bool spiral_recol=false;
void __fastcall TForm1::spiralTimer(TObject *Sender)
{
pb->Canvas->Brush->Color=clBlack;
pb->Canvas->Rectangle(0,0,Width,Height);
int i;
double ro,k=7,fi,step=0.1;
int W,H,x,y;
W=Form1->ClientWidth/2;
H=Form1->ClientHeight/2;
if (spiral_recol==true)spiral_col++;
if (spiral_recol==false)spiral_col--;
if (spiral_col>=254)spiral_recol=false;
if (spiral_col<=1)spiral_recol=true;
x=k*fi*W;
y=H;
pb->Canvas->Pen->Color=TColor(RGB(spiral_col,-spiral_col,spiral_col));
pb->Canvas->Pen->Width=5;
pb->Canvas->MoveTo(Width/2,Height/2);
spiral_angle++;
for(i=0;i<1500;i++)
        {
        fi=i*step;
        x=k*fi*cos(fi+spiral_angle)+W;
        y=k*fi*sin(fi+spiral_angle)+H;
        pb->Canvas->LineTo(x,y);
        }
pb->Canvas->Pen->Color=clBlack;pb->Canvas->Brush->Color=clBlack; pb->Canvas->Pen->Width=1;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.12.2010, 11:08
Ответы с готовыми решениями:

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

Как избавиться от мигания PictureBox при развертывании окна?
Привет всем. У меня есть одна проблемка, довольно не решается, суть в том что на PictureBox находится скрин, и при сворачивании окна...

Как избавиться от "мигания" при отрисовки графики
Здравствуйте! Хочу написать приложение на Visual C++, с использованием MFC. В приложении планируется вывод графической информации. В...

22
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
03.12.2010, 11:11
Matrica, если у Paintbox-a есть свойство DoubleBuffered, установи его в true, может и полечит твою беду
0
Now I Matrix
137 / 134 / 28
Регистрация: 01.03.2010
Сообщений: 223
03.12.2010, 11:12  [ТС]
нет в 6 билдере такого свойства ещё не было.
0
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
03.12.2010, 11:24
Цитата Сообщение от Matrica Посмотреть сообщение
нет в 6 билдере такого свойства ещё не было.
есть
его к форме надо применить... програмно
0
Now I Matrix
137 / 134 / 28
Регистрация: 01.03.2010
Сообщений: 223
03.12.2010, 11:26  [ТС]
спасибо, но не помогло, мигание осталось =(
0
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
03.12.2010, 11:27
Цитата Сообщение от Matrica Посмотреть сообщение
спасибо, но не помогло, мигание осталось =(
в каком месте применил ? лучше в конструкторе формы
0
Now I Matrix
137 / 134 / 28
Регистрация: 01.03.2010
Сообщений: 223
03.12.2010, 11:27  [ТС]
C++
1
2
3
4
5
6
7
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
DoubleBuffered=true;
}
 
//сдесь ;)
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
03.12.2010, 11:28
я тут в нете видел рекомендацию использовать TImage вместо TPaintBox


а вот еще статья по использованию TPaintBox - Рисование стрелки в TPaintBox
0
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
03.12.2010, 11:29
spiralTimer я так понимаю обработчик TTimer?
на какой интервал он выставлен?
0
Now I Matrix
137 / 134 / 28
Регистрация: 01.03.2010
Сообщений: 223
03.12.2010, 11:31  [ТС]
выставлен на 50

У меня есть код:
C++
1
2
3
4
5
6
7
8
9
void __fastcall TForm1::EffectStrobe(int pause=50,bool randcolor=true,TColor cl=clBlack)
{
if (randcolor==true)pb->Canvas->Brush->Color=TColor(RGB(random(255),random(255),random(255)));
else pb->Canvas->Brush->Color=cl;
pb->Canvas->Rectangle(0,0,pb->Width,pb->Height);
Sleep(pause);
pb->Canvas->Brush->Color=clBlack;
pb->Canvas->Rectangle(0,0,Width,Height);
}
это ни хилый стробоскоп, если я pb заменю на Image то такого результата не будет =)
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
03.12.2010, 11:33
Matrica, если статью читать лень, там в первых строках написано, что лучше рисовать в битмапе, а потом уже готовое изображение отображать
0
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
03.12.2010, 11:35
Выложи проект, проверю
0
Now I Matrix
137 / 134 / 28
Регистрация: 01.03.2010
Сообщений: 223
03.12.2010, 11:38  [ТС]
да нет, читать то не лень, просто с английским хорошо дружу =)

щас выложу (просто дома по среди комнаты стоит огромная плазма, и когда свет гасишь с помощью этой программки и подключённым через HDMI компьютером, получается офигенно =) )

вот, просто первый раз не вложилось
Вложения
Тип файла: zip Stroboscope.zip (1.26 Мб, 24 просмотров)
1
Now I Matrix
137 / 134 / 28
Регистрация: 01.03.2010
Сообщений: 223
03.12.2010, 11:43  [ТС]
а и ещё, там щас отключены управляющие таймеры, поэтому будет одна спираль =) !
0
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
03.12.2010, 12:00
сделай размеры TPaintBox с самого начала нужные а в таймере их не меняй. Я в свойствах Allign поставил alClient - мигать перестало, правда не уверен что спираль нужной конфигурации рисуется. Вобщем с установкой размеров поиграйся.
0
Now I Matrix
137 / 134 / 28
Регистрация: 01.03.2010
Сообщений: 223
03.12.2010, 12:02  [ТС]
а где ты видишь что размеры TPaintBox меняются по timer'y? Они меняются так:
C++
1
2
3
4
5
6
7
void __fastcall TForm1::FormResize(TObject *Sender)
{
pb->Left=0;
pb->Top=0;
pb->Width=ClientWidth;
pb->Height=ClientHeight;
}
и больше ни где


да даже если Client поставить всё равно мигает ужасно...хотя понятие мигает растяжимое....может они у нас просто разные...я говорю про то что когда смотришь на картинку видно как бы такие чёрные полосы пробегают...

а лучше всего это видно если поставить int laserdailer_selectlaser=0; , отключить таймер spiral и включить laserdailer->Enabled=true; =) то там так полоски мигать будут противно...фуу=(
0
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
03.12.2010, 12:07
я закоментил вот это:
Code
1
pb->Canvas->Rectangle(0,0,Width,Height);
и мигать перестало
0
Now I Matrix
137 / 134 / 28
Регистрация: 01.03.2010
Сообщений: 223
03.12.2010, 12:10  [ТС]
и при этом спираль не рисуется...а сразу закрашивает собой всё поле =) юморист, блин =)

Добавлено через 1 минуту
кстати тоже красивый эффект =) спасибо!
0
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
03.12.2010, 12:20
Тогда выход один, как сказали ранее, рисовать в памяти на битмапе, а потом его кидать на PictureBox
0
Now I Matrix
137 / 134 / 28
Регистрация: 01.03.2010
Сообщений: 223
03.12.2010, 12:21  [ТС]
а можно пример рисования чего угодно в памяти?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.12.2010, 12:21
Помогаю со студенческими работами здесь

Избавиться от мигания экрана
Бодрого времени суток, господа. Пытаюсь (безуспешно) решить такую проблему. Необходимо на экран непрерывно выводить информацию - время. ...

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

Смена частосты мигания при отпускании кнопки, потоки
Доброго времени суток, помогите с лабой пожалуйста по микроконтролерам. Задание: Когда пользователь отпускает кнопку, увеличить частоту...

При рисовании появляются полосы как при наложении
Доброго времени суток, возникла проблемка, при рисовании изображений с помощью Graphics потребовалось использовать, так сказать тайлинг...

ошибка при рисовании!!!
два участка кода которые рисуют график функции среднего температурного лагорифмического потока :umnik: пересмотрел много литературы ни...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru