Прозрачность Picture
-
- leader
- Сообщения: 526
- Зарегистрирован: 28 фев 2010, 18:04
- Версия LabVIEW: LV2018
- Благодарил (а): 10 раз
- Поблагодарили: 18 раз
- Контактная информация:
Прозрачность Picture
Как в Picture задать прозрачность определённого участка? Попробовал использовать Hilite Color.vi, но он не обеспечивает прозрачность в полном диапазоне.
-
- leader
- Сообщения: 526
- Зарегистрирован: 28 фев 2010, 18:04
- Версия LabVIEW: LV2018
- Благодарил (а): 10 раз
- Поблагодарили: 18 раз
- Контактная информация:
Re: Прозрачность Picture
Спасибо за ссылку. При беглом взгляде что то я не смог увидеть там, что мне пригодится. Скорее всего это из за того, что я очень плохо представляю структуру Image data, в частности для чего нужна маска и как она используется и т.д. С этим мне надо ещё разобраться. А так хотелось без лишних временных и умственных затрат иметь возможность задавать прозрачность некоего рисунка, наложенного на подложку-рисунок. В моём случае достаточно прямоугольной области, которая с разной степенью засвечивает заданную область основного рисунка-подложку. Посмотрел, что для 3D picture эта возможность есть и параметром, определяющим эту возможность, является некая альфа, входящая в состав задания цвета в формате RGB четвёртым параметром. А вообще очень странно (имеется ввиду идеология LV), что нет такой функции. А, может, она и есть в какой ни будь библиотеке. На всякий случай прикрепил шаблончик, в котором пробовал поэкспериментировать с прозрачностью.
- Вложения
-
- Прозрачность.vi
- (193.97 КБ) 128 скачиваний
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Прозрачность Picture
В приведённом мной примере продемонстрирована абсолютная прозрачность - если байт в маске равен 0, то пиксель прозрачный, иначе нет. Насколько я знаю, стандартные контролы и инструменты не поддерживают частичную прозрачность, которая вам нужна сейчас. Даже IMAQ не поддерживает, к сожалению. Но, как известно, в "поддерживаются" разного рода "извращения", так что можно попробовать реализовать то, что нужно:
Performing Alpha Transparency Color Manipulations in LabVIEW : http://www.ni.com/example/26682/en/
Вот ещё пример:
Create Partial Transparent Image Overlay Without VDM : https://forums.ni.com/t5/Example-Progra ... -p/3517061
Суть в том, что необходимо перебрать каждый пиксель на картинке и рассчитать его новый цвет с учётом альфа-канала. И тот, и другой пример, вероятно, придётся ещё допиливать.
Performing Alpha Transparency Color Manipulations in LabVIEW : http://www.ni.com/example/26682/en/
Вот ещё пример:
Create Partial Transparent Image Overlay Without VDM : https://forums.ni.com/t5/Example-Progra ... -p/3517061
Суть в том, что необходимо перебрать каждый пиксель на картинке и рассчитать его новый цвет с учётом альфа-канала. И тот, и другой пример, вероятно, придётся ещё допиливать.
-
- leader
- Сообщения: 526
- Зарегистрирован: 28 фев 2010, 18:04
- Версия LabVIEW: LV2018
- Благодарил (а): 10 раз
- Поблагодарили: 18 раз
- Контактная информация:
Re: Прозрачность Picture
Dadreamer, спасибо. Преобразование прозрачности из первого примера причесал и, вот, в приложении пример. В него же включил преобразование из второго примера - можно сравнить. Пример тяжеловесный, в нём можно подвигать окно, поменять его цвет и т. д. Правда он полностью не отлажен, может зависнуть при выходе окна за пределы пиктуры, но это не по существу. Прикладываю ещё один оригинальный, я даже сказал бы, смелый вариант - Transparent. Взят он от сюда http://www.labview.ru/forum/viewtopic.php?t=9446#p11128
Да, забыл спросить. В моём примере, когда отрисовывается всё поле, перерисовка идёт с миганием и незначительной задержкой. Можно ли это исправить?
Да, забыл спросить. В моём примере, когда отрисовывается всё поле, перерисовка идёт с миганием и незначительной задержкой. Можно ли это исправить?
- Вложения
-
- Прозрачность.zip
- (236.52 КБ) 117 скачиваний
-
- Transparent.zip
- (72.84 КБ) 118 скачиваний
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Прозрачность Picture
Неплохо получилось. Только немного нестабильно отрабатывает перемещения мыши, когда двигаешь маленькую картинку. Чтобы не мигало, надо поставить галочку Advanced -> Smooth Updates. До кучи можете все SubVI сделать реентерантными и отключить дебаг - будет чуть быстрее на слабых машинах. Вероятно, можно ещё как-то оптимизировать, например цикл For распараллелить. Надо играться.
-
- leader
- Сообщения: 526
- Зарегистрирован: 28 фев 2010, 18:04
- Версия LabVIEW: LV2018
- Благодарил (а): 10 раз
- Поблагодарили: 18 раз
- Контактная информация:
Re: Прозрачность Picture
Не обратил сразу внимание, а, ведь, прозрачность работает то не правильно - цвет прозрачности не отрабатывается. Не учтено, что массив Imadge состоит из байтов, а цвет складывается из трёх последовательных байтовых элементов массива. Диву даёшься тому как же работало. Проблему исправил - результат во вложении. Правильный вариант за номером 3.
<Только немного нестабильно отрабатывает перемещения мыши, когда двигаешь маленькую картинку.>
Отработка перемещения мыши происходит нормально, а дёргается, думаю, за счёт медленного перерисовывания картинки или обработки данных - надо смотреть.
<Только немного нестабильно отрабатывает перемещения мыши, когда двигаешь маленькую картинку.>
Отработка перемещения мыши происходит нормально, а дёргается, думаю, за счёт медленного перерисовывания картинки или обработки данных - надо смотреть.
- Вложения
-
- Прозрачность+.zip
- (255.95 КБ) 122 скачивания
Последний раз редактировалось Юрий 25 янв 2018, 16:55, всего редактировалось 1 раз.
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Прозрачность Picture
> Отработка перемещения мыши происходит нормально, а дёргается, думаю, за счёт медленного перерисовывания картинки или обработки данных - надо смотреть.
Вот, кстати, на домашнем компе работает нормально, без задержек и прочего. А на работе был такой эффект - резко дёргаешь мышью в любую сторону (при зажатой ЛКМ) и эта перемещаемая область "отказывается" туда перемещаться, а потом и вовсе не таскается мышью или как-то черезчур плохо таскается.
Вот, кстати, на домашнем компе работает нормально, без задержек и прочего. А на работе был такой эффект - резко дёргаешь мышью в любую сторону (при зажатой ЛКМ) и эта перемещаемая область "отказывается" туда перемещаться, а потом и вовсе не таскается мышью или как-то черезчур плохо таскается.
-
- leader
- Сообщения: 526
- Зарегистрирован: 28 фев 2010, 18:04
- Версия LabVIEW: LV2018
- Благодарил (а): 10 раз
- Поблагодарили: 18 раз
- Контактная информация:
Re: Прозрачность Picture
Что то мне неймётся. Переделал калькулятор прозрачности Transparency+vi. Быстродействие увеличилось в 8 раз. На самом примере не очень, но всё же чувствуется улучшение. Может, и у Вас ситуация улучшится?
- Вложения
-
- Transparency+.vi
- (30.07 КБ) 119 скачиваний
Последний раз редактировалось Юрий 25 янв 2018, 16:53, всего редактировалось 1 раз.
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Прозрачность Picture
Особо ничего почему-то не поменялось. Проблема с резким перемещением мыши осталась. Также в углах наблюдаются артефакты - чёрная полоса снизу и артефакты в левом верхнем и нижнем углах.
- Вложения
-
- 2018-01-25_10-14-30.jpg (367.27 КБ) 5505 просмотров
-
- leader
- Сообщения: 526
- Зарегистрирован: 28 фев 2010, 18:04
- Версия LabVIEW: LV2018
- Благодарил (а): 10 раз
- Поблагодарили: 18 раз
- Контактная информация:
Re: Прозрачность Picture
<Также в углах наблюдаются артефакты - чёрная полоса снизу и артефакты в левом верхнем и нижнем углах.>
Это следствие не полностью отлаженного примера. Надо допилить контроль выхода окна за пределы картинки. Будет настроение и время сделаю. А, вот, как улучшить ситуацию с рваным перемещением окна это существенно, а мыслей пока нет. Собственно я уже могу успокоиться, поскольку в моей основной задаче окно статично. Просто при исследовании какой либо новой проблемы стараюсь рассмотреть все варианты (на будущее).
Это следствие не полностью отлаженного примера. Надо допилить контроль выхода окна за пределы картинки. Будет настроение и время сделаю. А, вот, как улучшить ситуацию с рваным перемещением окна это существенно, а мыслей пока нет. Собственно я уже могу успокоиться, поскольку в моей основной задаче окно статично. Просто при исследовании какой либо новой проблемы стараюсь рассмотреть все варианты (на будущее).
Последний раз редактировалось Юрий 25 янв 2018, 16:04, всего редактировалось 1 раз.
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Прозрачность Picture
Предлагаю отслеживать событие "Нажата" И "В окне" только при вхождении курсора в область. Как только курсор туда зашёл И кнопка была нажата, запомнить это и дальше уже отслеживать только Mouse Up (что уже сделано). Я попробовал, всё работает чётко, без косяков.
В маленьком кейсе, в True кадре провод идёт напрямую с селектора. В Value Change регистр проброшен напрямую. В Mouse Down/Up регистр не подключён (дефолт). Единственный косяк, который здесь возникает - когда юзер с нажатой кнопкой мыши переместил курсор за большую картинку и там отжал кнопку. Тогда при возвращении курсора обратно на большую картинку снова рисуется маска и прочее, т.е. кнопка "как бы" всё ещё нажата. Ну, я думаю, это можно обойти через одна-два условия в Mouse Up.
В маленьком кейсе, в True кадре провод идёт напрямую с селектора. В Value Change регистр проброшен напрямую. В Mouse Down/Up регистр не подключён (дефолт). Единственный косяк, который здесь возникает - когда юзер с нажатой кнопкой мыши переместил курсор за большую картинку и там отжал кнопку. Тогда при возвращении курсора обратно на большую картинку снова рисуется маска и прочее, т.е. кнопка "как бы" всё ещё нажата. Ну, я думаю, это можно обойти через одна-два условия в Mouse Up.
- Вложения
-
- 2018-01-25_16-55-18.jpg (298.53 КБ) 5492 просмотра
-
- leader
- Сообщения: 526
- Зарегистрирован: 28 фев 2010, 18:04
- Версия LabVIEW: LV2018
- Благодарил (а): 10 раз
- Поблагодарили: 18 раз
- Контактная информация:
Re: Прозрачность Picture
Может, чего то я не до понял, но у меня никакого положительного эффекта.
<В Value Change регистр проброшен напрямую.> О каком Value Change идёт речь? Может, легче выложить свой вариант.
<В Value Change регистр проброшен напрямую.> О каком Value Change идёт речь? Может, легче выложить свой вариант.
-
- leader
- Сообщения: 526
- Зарегистрирован: 28 фев 2010, 18:04
- Версия LabVIEW: LV2018
- Благодарил (а): 10 раз
- Поблагодарили: 18 раз
- Контактная информация:
Re: Прозрачность Picture
Да, понял я правильно, именно так и сделал, но улучшения нет. В общем остаюсь при том же мнении, что дёрганья - из за задержек при перерисовке, и тут уж ничего не сделать.