Промаргивание экрана (TImage)
Исходные данные: Необходимо отрисовывать на компоненте VCL (я использую TImage) быстро меняющуюся картинку (порядка 10-30 Гц). Рисую как в книжках умных пишут - сначала на TBitMap в памяти - потом оный BitMap копирую в TImage (с помощью Assign, Draw, CopyRect и BitBlt (API)). При создании TImage в его ControlState добавлен csOpaque
Проблема вот в чём:По какому-то случайному закону экран промаргивает, как при перерисовке непосредственно по TImage. Причём промаргивание нерегулярное, от частоты обновления не зависит (а только от кол-ва перерисовок - промаргивает на 20-30 -ю перерисовку). Полоса промаргивания - 30% от всего рисунка по высоте и шириной на весь рисунок. Оная полоса промаргивания обычно при каждой перерисовке спускается сверху вниз, уходит за экран и потом, через 20-30 перерисовок повторяется.
Тестовый исходник в зип-е подсоединён (там не основная программа, но абсолютно та-же ситуация и те-же симптомы)
Вопрос: Как избавится от оного моргания, не прибегая к DirectDraw методам???
Цитата:
Originally posted by zhaw
Помогите, пожалуйста, с графикой разобраться...
Исходные данные: Необходимо отрисовывать на компоненте VCL (я использую TImage) быстро меняющуюся картинку (порядка 10-30 Гц). Рисую как в книжках умных пишут - сначала на TBitMap в памяти - потом оный BitMap копирую в TImage (с помощью Assign, Draw, CopyRect и BitBlt (API)). При создании TImage в его ControlState добавлен csOpaque
Проблема вот в чём:По какому-то случайному закону экран промаргивает, как при перерисовке непосредственно по TImage. Причём промаргивание нерегулярное, от частоты обновления не зависит (а только от кол-ва перерисовок - промаргивает на 20-30 -ю перерисовку). Полоса промаргивания - 30% от всего рисунка по высоте и шириной на весь рисунок. Оная полоса промаргивания обычно при каждой перерисовке спускается сверху вниз, уходит за экран и потом, через 20-30 перерисовок повторяется.
Тестовый исходник в зип-е подсоединён (там не основная программа, но абсолютно та-же ситуация и те-же симптомы)
Вопрос: Как избавится от оного моргания, не прибегая к DirectDraw методам???
Помогите, пожалуйста, с графикой разобраться...
Исходные данные: Необходимо отрисовывать на компоненте VCL (я использую TImage) быстро меняющуюся картинку (порядка 10-30 Гц). Рисую как в книжках умных пишут - сначала на TBitMap в памяти - потом оный BitMap копирую в TImage (с помощью Assign, Draw, CopyRect и BitBlt (API)). При создании TImage в его ControlState добавлен csOpaque
Проблема вот в чём:По какому-то случайному закону экран промаргивает, как при перерисовке непосредственно по TImage. Причём промаргивание нерегулярное, от частоты обновления не зависит (а только от кол-ва перерисовок - промаргивает на 20-30 -ю перерисовку). Полоса промаргивания - 30% от всего рисунка по высоте и шириной на весь рисунок. Оная полоса промаргивания обычно при каждой перерисовке спускается сверху вниз, уходит за экран и потом, через 20-30 перерисовок повторяется.
Тестовый исходник в зип-е подсоединён (там не основная программа, но абсолютно та-же ситуация и те-же симптомы)
Вопрос: Как избавится от оного моргания, не прибегая к DirectDraw методам???
Действительно такая проблема существует и проявляется когда с высокой частотой обновляется компонент Image или любой другой компонент. Для того чтобы её решить не нужно переходить к DirectX или OpenGl, попробуй рисовать прямо на форму.
Цитата:
Originally posted by Alexsandr
Действительно такая проблема существует и проявляется когда с высокой частотой обновляется компонент Image или любой другой компонент. Для того чтобы её решить не нужно переходить к DirectX или OpenGl, попробуй рисовать прямо на форму.
Действительно такая проблема существует и проявляется когда с высокой частотой обновляется компонент Image или любой другой компонент. Для того чтобы её решить не нужно переходить к DirectX или OpenGl, попробуй рисовать прямо на форму.
Спасибо за подсказку. Я пробовал похожее - рисовал на TPanel - тоже не очень. Зато (как посоветовали умные люди) выставил св-во Double_buffered у компонента родителя (панельки под TImage'ем) в True и всё стало ОК. Чего и вам желаю!
А я рисовал прямо по канве формы и все прекрасно работало и не промаргивало. (на тимаже промаргивало). И ехе меньше получается. Меньше компонент больше результата.