Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > мерцание на экране при рисовании *.BMP файла


Автор: Protocol 12.1.2006, 20:35
Здравствуйте, вопрос состит в следующем:

Надо рисовать ВМР файл, выводя его на экране [B]построчно, исключив мерцание на экране[/B]

Если рисовать через Image->Canvas появляется мерцание (сразу хочу сказать, что мерцание именно
программное с монитором и с железом все впорядке, проверено на нескольких, вт.ч. и новом... smile ), но все рисуется.

Если рисовать с помощью функции SetDibitsToDevice() все также рисует, но почему-то обновляется изображение при выходе из процедуры, т.е. не рисуется построчно, а рисуется (появляется) сразу изображение (нет эффекта рисования построчно)...

спаибо....

Автор: DemoCode 12.1.2006, 20:41
компоненту TImage свойство DoubleBuffered в true.

Автор: Protocol 19.1.2006, 21:24
Спасибо, все заработало! smile

Автор: Reewz 28.1.2006, 03:59
а у Image разве есть такое свойство?

Автор: DemoCode 28.1.2006, 14:54
Цитата(Reewz @ 28.1.2006, 04:59 Найти цитируемый пост)

а у Image разве есть такое свойство?

Есть, только его в Object Inspectore нет.

Автор: Reewz 29.1.2006, 07:12
странно. Я у себя в 6-ом перерыл все от и до, но такого свойства у компонента TImage не обнаружил. А при непосредственном вводе свойства при компиляции Билдер выдает ошибку отсутствия данного свойства у компонента...

Автор: Reewz 30.1.2006, 19:41
Все, разобрался в действительности с TImage и свойством DoubleBuffered. Спасибо.

Автор: GLOOM 30.1.2006, 22:19
подскажи

Автор: Reewz 31.1.2006, 00:58
не знаю как там на самом деле, но если рисование происходит построчно в цикле события onTimer то перед включением таймера присваиваешь DoubleBuffered=true;
т.е. пример :
Код

DoubleBuffered=true;
Timer1->Enabled=true;

а при выходе :
Код

Timer1->Enabled=false;
DoubleBuffered=false;

Единственное что это приводит к лишнему расходу памяти. Но вроде не особо заметно, если не сильно загружена. Правда одно но все таки есть этого метода. Т.е. в момент когда какая - либо часть канвы перерисовывается кардинально, а вторая часть жестко связанная с первой почти не меняется, то могут возникать наложения картин или что-то вроде.

Автор: prohozhy 26.3.2006, 15:59
Так по всему выходит, что DoubleBuffered это свойство формы, а не TImage? smile

Автор: SerK 8.8.2008, 09:05
Свойство DoubleBuffered помогает, но откройте Диспетчер задач и посмотрите, какая происходит утечка памяти при каждой прорисовке. У меня доходило до переполнения буфера системы и нехватки памяти. Поэтому нужно прорисовывать сначала в TBitmap, а потом выводить на Canvas.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)