Как убрать мерцание на изображении?

Обсуждение вопросов, связанных с обработкой аудио и видео информации
Ответить
Аватара пользователя
kiparym
advanced
advanced
Сообщения: 178
Зарегистрирован: 06 сен 2011, 08:52
Версия LabVIEW: 8.2 & 2011
Откуда: г. Саров
Поблагодарили: 1 раз
Контактная информация:

Как убрать мерцание на изображении?

Сообщение kiparym »

Добрый день форумчане!
Требуется на изображении с помощью мыши выделить объект прямоугольником. Программа работает, но при перемещении мыши наблюдаются мерцания изображения. Подскажите, где ошибка?
Область изображения.jpg
Аватара пользователя
Sergey Ivanov

Activity Professionalism Gold Автор
expert
expert
Сообщения: 1217
Зарегистрирован: 01 мар 2009, 20:54
Награды: 5
Версия LabVIEW: 2018
Откуда: Санкт-Петербург, Кронштадт
Благодарил (а): 11 раз
Поблагодарили: 1 раз
Контактная информация:

Re: Как убрать мерцание на изображении?

Сообщение Sergey Ivanov »

Не могли бы выложить ваш :vi: , а то не очень понятно что за мерцание? Может, ожидание (около 20 мс) в цикл добавить - мерцание не пропадёт ?
Добро пожаловать на http://rk-stud.ru/
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5540
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 32 раза
Поблагодарили: 103 раза

Re: Как убрать мерцание на изображении?

Сообщение IvanLis »

Делал как-то для своей задачи
Посмотрите, может поможет:
CreateData.vi
lv2010
(39.51 КБ) 229 скачиваний
Borjomy_1

Activity Professionalism Silver
doctor
doctor
Сообщения: 2249
Зарегистрирован: 28 июн 2012, 09:32
Награды: 3
Версия LabVIEW: 2009..2020
Откуда: город семи холмов
Благодарил (а): 32 раза
Поблагодарили: 30 раз

Re: Как убрать мерцание на изображении?

Сообщение Borjomy_1 »

мерцание возникает если
1. в свойствах Picture установлен флажок "Erase First"
2. Элементы выводятся последовательно, через локальную переменную.
Особенность (и неприятность) работы с Picture заключается в том, что он выполняется через виндовую библиотеку. Сделано через "одно место".
Формат picture - текстовая строка, в которую добавляются команды вывода примитивов (правда, команды всё-таки в бинарном виде, но хранится в строке, со всеми вытекающими из этого типа особенностями выделения памяти). Т.е на picture выводится не сформированное изображение, а на нем рисуются примитивы в порядке добавления в строку. Команда Empty Picture - очищает изображение, если Erase First установлено, то при выводе сначала выполняется эта команда.
В кейсе эвентов не установлено время таймаута, поэтому вывод на picture происходит при перемещении мыши, когда кейс выполняется. Если поставить время таймаута, то picture будет мерцать в данной реализации постоянно.
Аватара пользователя
kiparym
advanced
advanced
Сообщения: 178
Зарегистрирован: 06 сен 2011, 08:52
Версия LabVIEW: 8.2 & 2011
Откуда: г. Саров
Поблагодарили: 1 раз
Контактная информация:

Re: Как убрать мерцание на изображении?

Сообщение kiparym »

Большое спасибо всем участникам обсуждения!
Причина, как правильно указал Borjomy_1, является медленное обновление экрана. При частых поступлениях прерываний, обновление не успевает отработать. Можно поставить задержку, но на большом экране даже 100мс недостаточно.
Хорошее решение для данного примера – убрать очистку Erase Fiist ( Для LV_V11. Picture  Property Node Erase First = 0 )!
Спасибо также и Ivan Lis – я позаимствовал некоторые решения.
Borjomy_1

Activity Professionalism Silver
doctor
doctor
Сообщения: 2249
Зарегистрирован: 28 июн 2012, 09:32
Награды: 3
Версия LabVIEW: 2009..2020
Откуда: город семи холмов
Благодарил (а): 32 раза
Поблагодарили: 30 раз

Re: Как убрать мерцание на изображении?

Сообщение Borjomy_1 »

Обновление экрана не медленное, мерцание возникает именно из-за того, что все действия по отрисовке попадают в очередь отрисовки окна. Если вы нарисуете маленький квадрат, потом на него наложите большой, то при выводе на picture увидите промелькнувший маленький. По идее надо вводить буферизацию, рисовать в другом picture, а потом из него забирать бинарный образ. Либо продумывать прорисовку.
Аватара пользователя
Irwyn
interested
interested
Сообщения: 4
Зарегистрирован: 08 ноя 2024, 09:16
Версия LabVIEW: 2021
Откуда: Москва

Re: Как убрать мерцание на изображении?

Сообщение Irwyn »

Старая тема, понимаю, но столкнулся с данной проблемой. Отключение Erase first ломает построенное примитивами изображение. Это удалось победить так:
1) Создаём нужное изображение различными вашими методами
2) -> Picture to pixmap
3) Обратно -> Draw Flattened Pixmap
4) Выводм на Picture control

Звучит спорно, но мерцание пропало почти полностью в задаче с обновлением изображения десятки раз в секунду.
Artem.spb

Activity Автор
professor
professor
Сообщения: 3538
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 56 раз
Поблагодарили: 189 раз
Контактная информация:

Re: Как убрать мерцание на изображении?

Сообщение Artem.spb »

Irwyn писал(а): 27 ноя 2024, 16:49 Старая тема, понимаю, но столкнулся с данной проблемой. Отключение Erase first ломает построенное примитивами изображение. Это удалось победить так:
1) Создаём нужное изображение различными вашими методами
2) -> Picture to pixmap
3) Обратно -> Draw Flattened Pixmap
4) Выводм на Picture control

Звучит спорно, но мерцание пропало почти полностью в задаче с обновлением изображения десятки раз в секунду.
Именно это описано в предыдущем сообщении :)
По идее надо вводить буферизацию, рисовать в другом picture, а потом из него забирать бинарный образ.
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Работа с графикой и звуком»