Прозрачность Picture

Простейшие вопросы в области инженерной разработки

Прозрачность Picture

Postby Юрий on 22 Jan 2018, 19:04

Как в Picture задать прозрачность определённого участка? Попробовал использовать Hilite Color.vi, но он не обеспечивает прозрачность в полном диапазоне.
Юрий
developer
developer
 
Posts: 283
Joined: 28 Feb 2010, 18:04
LabVIEW Version: LV2015
Karma: 52

Re: Прозрачность Picture

Postby dadreamer on 22 Jan 2018, 19:49

User avatar
dadreamer
professor
professor
 
Posts: 3128
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2018
Karma: 790
I/O VIP vision internet

Re: Прозрачность Picture

Postby Юрий on 23 Jan 2018, 01:57

Спасибо за ссылку. При беглом взгляде что то я не смог увидеть там, что мне пригодится. Скорее всего это из за того, что я очень плохо представляю структуру Image data, в частности для чего нужна маска и как она используется и т.д. С этим мне надо ещё разобраться. А так хотелось без лишних временных и умственных затрат иметь возможность задавать прозрачность некоего рисунка, наложенного на подложку-рисунок. В моём случае достаточно прямоугольной области, которая с разной степенью засвечивает заданную область основного рисунка-подложку. Посмотрел, что для 3D picture эта возможность есть и параметром, определяющим эту возможность, является некая альфа, входящая в состав задания цвета в формате RGB четвёртым параметром. А вообще очень странно (имеется ввиду идеология LV), что нет такой функции. А, может, она и есть в какой ни будь библиотеке. На всякий случай прикрепил шаблончик, в котором пробовал поэкспериментировать с прозрачностью.
Attachments
Прозрачность.vi
(193.97 KiB) Downloaded 67 times
Юрий
developer
developer
 
Posts: 283
Joined: 28 Feb 2010, 18:04
LabVIEW Version: LV2015
Karma: 52

Re: Прозрачность Picture

Postby dadreamer on 23 Jan 2018, 10:54

В приведённом мной примере продемонстрирована абсолютная прозрачность - если байт в маске равен 0, то пиксель прозрачный, иначе нет. Насколько я знаю, стандартные контролы и инструменты :labview: не поддерживают частичную прозрачность, которая вам нужна сейчас. Даже IMAQ не поддерживает, к сожалению. Но, как известно, в :labview: "поддерживаются" разного рода "извращения", так что можно попробовать реализовать то, что нужно:
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
Суть в том, что необходимо перебрать каждый пиксель на картинке и рассчитать его новый цвет с учётом альфа-канала. И тот, и другой пример, вероятно, придётся ещё допиливать.
User avatar
dadreamer
professor
professor
 
Posts: 3128
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2018
Karma: 790
I/O VIP vision internet

Re: Прозрачность Picture

Postby Юрий on 23 Jan 2018, 21:57

Dadreamer, спасибо. Преобразование прозрачности из первого примера причесал и, вот, в приложении пример. В него же включил преобразование из второго примера - можно сравнить. Пример тяжеловесный, в нём можно подвигать окно, поменять его цвет и т. д. Правда он полностью не отлажен, может зависнуть при выходе окна за пределы пиктуры, но это не по существу. Прикладываю ещё один оригинальный, я даже сказал бы, смелый вариант - Transparent. Взят он от сюда http://www.labview.ru/forum/viewtopic.php?t=9446#p11128
Да, забыл спросить. В моём примере, когда отрисовывается всё поле, перерисовка идёт с миганием и незначительной задержкой. Можно ли это исправить?
Attachments
Прозрачность.zip
(236.52 KiB) Downloaded 67 times
Transparent.zip
(72.84 KiB) Downloaded 68 times
Юрий
developer
developer
 
Posts: 283
Joined: 28 Feb 2010, 18:04
LabVIEW Version: LV2015
Karma: 52

Re: Прозрачность Picture

Postby dadreamer on 24 Jan 2018, 08:00

Неплохо получилось. Только немного нестабильно отрабатывает перемещения мыши, когда двигаешь маленькую картинку. Чтобы не мигало, надо поставить галочку Advanced -> Smooth Updates. До кучи можете все SubVI сделать реентерантными и отключить дебаг - будет чуть быстрее на слабых машинах. Вероятно, можно ещё как-то оптимизировать, например цикл For распараллелить. Надо играться.
User avatar
dadreamer
professor
professor
 
Posts: 3128
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2018
Karma: 790
I/O VIP vision internet

Re: Прозрачность Picture

Postby Юрий on 24 Jan 2018, 19:39

Не обратил сразу внимание, а, ведь, прозрачность работает то не правильно - цвет прозрачности не отрабатывается. Не учтено, что массив Imadge состоит из байтов, а цвет складывается из трёх последовательных байтовых элементов массива. Диву даёшься тому как же работало. Проблему исправил - результат во вложении. Правильный вариант за номером 3.
<Только немного нестабильно отрабатывает перемещения мыши, когда двигаешь маленькую картинку.>
Отработка перемещения мыши происходит нормально, а дёргается, думаю, за счёт медленного перерисовывания картинки или обработки данных - надо смотреть.
Attachments
Прозрачность+.zip
(255.95 KiB) Downloaded 66 times
Last edited by Юрий on 25 Jan 2018, 16:55, edited 1 time in total.
Юрий
developer
developer
 
Posts: 283
Joined: 28 Feb 2010, 18:04
LabVIEW Version: LV2015
Karma: 52

Re: Прозрачность Picture

Postby dadreamer on 24 Jan 2018, 20:04

> Отработка перемещения мыши происходит нормально, а дёргается, думаю, за счёт медленного перерисовывания картинки или обработки данных - надо смотреть.
Вот, кстати, на домашнем компе работает нормально, без задержек и прочего. А на работе был такой эффект - резко дёргаешь мышью в любую сторону (при зажатой ЛКМ) и эта перемещаемая область "отказывается" туда перемещаться, а потом и вовсе не таскается мышью или как-то черезчур плохо таскается.
User avatar
dadreamer
professor
professor
 
Posts: 3128
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2018
Karma: 790
I/O VIP vision internet

Re: Прозрачность Picture

Postby Юрий on 24 Jan 2018, 21:09

Что то мне неймётся. Переделал калькулятор прозрачности Transparency+vi. Быстродействие увеличилось в 8 раз. На самом примере не очень, но всё же чувствуется улучшение. Может, и у Вас ситуация улучшится?
Attachments
Transparency+.vi
(30.07 KiB) Downloaded 70 times
Last edited by Юрий on 25 Jan 2018, 16:53, edited 1 time in total.
Юрий
developer
developer
 
Posts: 283
Joined: 28 Feb 2010, 18:04
LabVIEW Version: LV2015
Karma: 52

Re: Прозрачность Picture

Postby dadreamer on 25 Jan 2018, 08:15

Особо ничего почему-то не поменялось. Проблема с резким перемещением мыши осталась. Также в углах наблюдаются артефакты - чёрная полоса снизу и артефакты в левом верхнем и нижнем углах.
Attachments
2018-01-25_10-14-30.jpg
2018-01-25_10-14-30.jpg (367.27 KiB) Viewed 2161 times
User avatar
dadreamer
professor
professor
 
Posts: 3128
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2018
Karma: 790
I/O VIP vision internet

Re: Прозрачность Picture

Postby Юрий on 25 Jan 2018, 14:16

<Также в углах наблюдаются артефакты - чёрная полоса снизу и артефакты в левом верхнем и нижнем углах.>
Это следствие не полностью отлаженного примера. Надо допилить контроль выхода окна за пределы картинки. Будет настроение и время сделаю. А, вот, как улучшить ситуацию с рваным перемещением окна это существенно, а мыслей пока нет. Собственно я уже могу успокоиться, поскольку в моей основной задаче окно статично. Просто при исследовании какой либо новой проблемы стараюсь рассмотреть все варианты (на будущее).
Last edited by Юрий on 25 Jan 2018, 16:04, edited 1 time in total.
Юрий
developer
developer
 
Posts: 283
Joined: 28 Feb 2010, 18:04
LabVIEW Version: LV2015
Karma: 52

Re: Прозрачность Picture

Postby dadreamer on 25 Jan 2018, 15:05

Предлагаю отслеживать событие "Нажата" И "В окне" только при вхождении курсора в область. Как только курсор туда зашёл И кнопка была нажата, запомнить это и дальше уже отслеживать только Mouse Up (что уже сделано). Я попробовал, всё работает чётко, без косяков.

В маленьком кейсе, в True кадре провод идёт напрямую с селектора. В Value Change регистр проброшен напрямую. В Mouse Down/Up регистр не подключён (дефолт). Единственный косяк, который здесь возникает - когда юзер с нажатой кнопкой мыши переместил курсор за большую картинку и там отжал кнопку. Тогда при возвращении курсора обратно на большую картинку снова рисуется маска и прочее, т.е. кнопка "как бы" всё ещё нажата. Ну, я думаю, это можно обойти через одна-два условия в Mouse Up.
Attachments
2018-01-25_16-55-18.jpg
2018-01-25_16-55-18.jpg (298.53 KiB) Viewed 2148 times
User avatar
dadreamer
professor
professor
 
Posts: 3128
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2018
Karma: 790
I/O VIP vision internet

Re: Прозрачность Picture

Postby Юрий on 25 Jan 2018, 16:52

Может, чего то я не до понял, но у меня никакого положительного эффекта.
<В Value Change регистр проброшен напрямую.> О каком Value Change идёт речь? Может, легче выложить свой вариант.
Юрий
developer
developer
 
Posts: 283
Joined: 28 Feb 2010, 18:04
LabVIEW Version: LV2015
Karma: 52

Re: Прозрачность Picture

Postby dadreamer on 25 Jan 2018, 17:56

Attachments
transp2.rar
lv2015
(136.3 KiB) Downloaded 62 times
User avatar
dadreamer
professor
professor
 
Posts: 3128
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2018
Karma: 790
I/O VIP vision internet

Re: Прозрачность Picture

Postby Юрий on 25 Jan 2018, 18:09

Да, понял я правильно, именно так и сделал, но улучшения нет. В общем остаюсь при том же мнении, что дёрганья - из за задержек при перерисовке, и тут уж ничего не сделать.
Юрий
developer
developer
 
Posts: 283
Joined: 28 Feb 2010, 18:04
LabVIEW Version: LV2015
Karma: 52

Next

Return to Для чайников

Who is online

Users browsing this forum: No registered users and 7 guests

cron