Добрый день форумчане!
Требуется на изображении с помощью мыши выделить объект прямоугольником. Программа работает, но при перемещении мыши наблюдаются мерцания изображения. Подскажите, где ошибка?
Как убрать мерцание на изображении?
-
Sergey Ivanov
- expert
- Сообщения: 1217
- Зарегистрирован: 01 мар 2009, 20:54
- Награды: 5
- Версия LabVIEW: 2018
- Откуда: Санкт-Петербург, Кронштадт
- Благодарил (а): 11 раз
- Поблагодарили: 1 раз
- Контактная информация:
Re: Как убрать мерцание на изображении?
Не могли бы выложить ваш , а то не очень понятно что за мерцание? Может, ожидание (около 20 мс) в цикл добавить - мерцание не пропадёт ?
Добро пожаловать на http://rk-stud.ru/
-
IvanLis
- guru
- Сообщения: 5540
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 32 раза
- Поблагодарили: 103 раза
Re: Как убрать мерцание на изображении?
Делал как-то для своей задачи
Посмотрите, может поможет:
Посмотрите, может поможет:
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
-
- doctor
- Сообщения: 2249
- Зарегистрирован: 28 июн 2012, 09:32
- Награды: 3
- Версия LabVIEW: 2009..2020
- Откуда: город семи холмов
- Благодарил (а): 32 раза
- Поблагодарили: 30 раз
Re: Как убрать мерцание на изображении?
мерцание возникает если
1. в свойствах Picture установлен флажок "Erase First"
2. Элементы выводятся последовательно, через локальную переменную.
Особенность (и неприятность) работы с Picture заключается в том, что он выполняется через виндовую библиотеку. Сделано через "одно место".
Формат picture - текстовая строка, в которую добавляются команды вывода примитивов (правда, команды всё-таки в бинарном виде, но хранится в строке, со всеми вытекающими из этого типа особенностями выделения памяти). Т.е на picture выводится не сформированное изображение, а на нем рисуются примитивы в порядке добавления в строку. Команда Empty Picture - очищает изображение, если Erase First установлено, то при выводе сначала выполняется эта команда.
В кейсе эвентов не установлено время таймаута, поэтому вывод на picture происходит при перемещении мыши, когда кейс выполняется. Если поставить время таймаута, то picture будет мерцать в данной реализации постоянно.
1. в свойствах Picture установлен флажок "Erase First"
2. Элементы выводятся последовательно, через локальную переменную.
Особенность (и неприятность) работы с Picture заключается в том, что он выполняется через виндовую библиотеку. Сделано через "одно место".
Формат picture - текстовая строка, в которую добавляются команды вывода примитивов (правда, команды всё-таки в бинарном виде, но хранится в строке, со всеми вытекающими из этого типа особенностями выделения памяти). Т.е на picture выводится не сформированное изображение, а на нем рисуются примитивы в порядке добавления в строку. Команда Empty Picture - очищает изображение, если Erase First установлено, то при выводе сначала выполняется эта команда.
В кейсе эвентов не установлено время таймаута, поэтому вывод на picture происходит при перемещении мыши, когда кейс выполняется. Если поставить время таймаута, то picture будет мерцать в данной реализации постоянно.
- kiparym
- advanced
- Сообщения: 178
- Зарегистрирован: 06 сен 2011, 08:52
- Версия LabVIEW: 8.2 & 2011
- Откуда: г. Саров
- Поблагодарили: 1 раз
- Контактная информация:
Re: Как убрать мерцание на изображении?
Большое спасибо всем участникам обсуждения!
Причина, как правильно указал Borjomy_1, является медленное обновление экрана. При частых поступлениях прерываний, обновление не успевает отработать. Можно поставить задержку, но на большом экране даже 100мс недостаточно.
Хорошее решение для данного примера – убрать очистку Erase Fiist ( Для LV_V11. Picture Property Node Erase First = 0 )!
Спасибо также и Ivan Lis – я позаимствовал некоторые решения.
Причина, как правильно указал Borjomy_1, является медленное обновление экрана. При частых поступлениях прерываний, обновление не успевает отработать. Можно поставить задержку, но на большом экране даже 100мс недостаточно.
Хорошее решение для данного примера – убрать очистку Erase Fiist ( Для LV_V11. Picture Property Node Erase First = 0 )!
Спасибо также и Ivan Lis – я позаимствовал некоторые решения.
-
- doctor
- Сообщения: 2249
- Зарегистрирован: 28 июн 2012, 09:32
- Награды: 3
- Версия LabVIEW: 2009..2020
- Откуда: город семи холмов
- Благодарил (а): 32 раза
- Поблагодарили: 30 раз
Re: Как убрать мерцание на изображении?
Обновление экрана не медленное, мерцание возникает именно из-за того, что все действия по отрисовке попадают в очередь отрисовки окна. Если вы нарисуете маленький квадрат, потом на него наложите большой, то при выводе на picture увидите промелькнувший маленький. По идее надо вводить буферизацию, рисовать в другом picture, а потом из него забирать бинарный образ. Либо продумывать прорисовку.
- Irwyn
- interested
- Сообщения: 4
- Зарегистрирован: 08 ноя 2024, 09:16
- Версия LabVIEW: 2021
- Откуда: Москва
Re: Как убрать мерцание на изображении?
Старая тема, понимаю, но столкнулся с данной проблемой. Отключение Erase first ломает построенное примитивами изображение. Это удалось победить так:
1) Создаём нужное изображение различными вашими методами
2) -> Picture to pixmap
3) Обратно -> Draw Flattened Pixmap
4) Выводм на Picture control
Звучит спорно, но мерцание пропало почти полностью в задаче с обновлением изображения десятки раз в секунду.
1) Создаём нужное изображение различными вашими методами
2) -> Picture to pixmap
3) Обратно -> Draw Flattened Pixmap
4) Выводм на Picture control
Звучит спорно, но мерцание пропало почти полностью в задаче с обновлением изображения десятки раз в секунду.
-
- professor
- Сообщения: 3538
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 56 раз
- Поблагодарили: 189 раз
- Контактная информация:
Re: Как убрать мерцание на изображении?
Именно это описано в предыдущем сообщенииIrwyn писал(а): ↑27 ноя 2024, 16:49 Старая тема, понимаю, но столкнулся с данной проблемой. Отключение Erase first ломает построенное примитивами изображение. Это удалось победить так:
1) Создаём нужное изображение различными вашими методами
2) -> Picture to pixmap
3) Обратно -> Draw Flattened Pixmap
4) Выводм на Picture control
Звучит спорно, но мерцание пропало почти полностью в задаче с обновлением изображения десятки раз в секунду.
По идее надо вводить буферизацию, рисовать в другом picture, а потом из него забирать бинарный образ.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
- 2 Ответы
- 340 Просмотры
-
Последнее сообщение BAS