Страница 1 из 2

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

Добавлено: 22 янв 2018, 19:04
Юрий
Как в Picture задать прозрачность определённого участка? Попробовал использовать Hilite Color.vi, но он не обеспечивает прозрачность в полном диапазоне.

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

Добавлено: 22 янв 2018, 19:49
dadreamer

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

Добавлено: 23 янв 2018, 01:57
Юрий
Спасибо за ссылку. При беглом взгляде что то я не смог увидеть там, что мне пригодится. Скорее всего это из за того, что я очень плохо представляю структуру Image data, в частности для чего нужна маска и как она используется и т.д. С этим мне надо ещё разобраться. А так хотелось без лишних временных и умственных затрат иметь возможность задавать прозрачность некоего рисунка, наложенного на подложку-рисунок. В моём случае достаточно прямоугольной области, которая с разной степенью засвечивает заданную область основного рисунка-подложку. Посмотрел, что для 3D picture эта возможность есть и параметром, определяющим эту возможность, является некая альфа, входящая в состав задания цвета в формате RGB четвёртым параметром. А вообще очень странно (имеется ввиду идеология LV), что нет такой функции. А, может, она и есть в какой ни будь библиотеке. На всякий случай прикрепил шаблончик, в котором пробовал поэкспериментировать с прозрачностью.

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

Добавлено: 23 янв 2018, 10:54
dadreamer
В приведённом мной примере продемонстрирована абсолютная прозрачность - если байт в маске равен 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
Суть в том, что необходимо перебрать каждый пиксель на картинке и рассчитать его новый цвет с учётом альфа-канала. И тот, и другой пример, вероятно, придётся ещё допиливать.

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

Добавлено: 23 янв 2018, 21:57
Юрий
Dadreamer, спасибо. Преобразование прозрачности из первого примера причесал и, вот, в приложении пример. В него же включил преобразование из второго примера - можно сравнить. Пример тяжеловесный, в нём можно подвигать окно, поменять его цвет и т. д. Правда он полностью не отлажен, может зависнуть при выходе окна за пределы пиктуры, но это не по существу. Прикладываю ещё один оригинальный, я даже сказал бы, смелый вариант - Transparent. Взят он от сюда http://www.labview.ru/forum/viewtopic.php?t=9446#p11128
Да, забыл спросить. В моём примере, когда отрисовывается всё поле, перерисовка идёт с миганием и незначительной задержкой. Можно ли это исправить?

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

Добавлено: 24 янв 2018, 08:00
dadreamer
Неплохо получилось. Только немного нестабильно отрабатывает перемещения мыши, когда двигаешь маленькую картинку. Чтобы не мигало, надо поставить галочку Advanced -> Smooth Updates. До кучи можете все SubVI сделать реентерантными и отключить дебаг - будет чуть быстрее на слабых машинах. Вероятно, можно ещё как-то оптимизировать, например цикл For распараллелить. Надо играться.

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

Добавлено: 24 янв 2018, 19:39
Юрий
Не обратил сразу внимание, а, ведь, прозрачность работает то не правильно - цвет прозрачности не отрабатывается. Не учтено, что массив Imadge состоит из байтов, а цвет складывается из трёх последовательных байтовых элементов массива. Диву даёшься тому как же работало. Проблему исправил - результат во вложении. Правильный вариант за номером 3.
<Только немного нестабильно отрабатывает перемещения мыши, когда двигаешь маленькую картинку.>
Отработка перемещения мыши происходит нормально, а дёргается, думаю, за счёт медленного перерисовывания картинки или обработки данных - надо смотреть.

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

Добавлено: 24 янв 2018, 20:04
dadreamer
> Отработка перемещения мыши происходит нормально, а дёргается, думаю, за счёт медленного перерисовывания картинки или обработки данных - надо смотреть.
Вот, кстати, на домашнем компе работает нормально, без задержек и прочего. А на работе был такой эффект - резко дёргаешь мышью в любую сторону (при зажатой ЛКМ) и эта перемещаемая область "отказывается" туда перемещаться, а потом и вовсе не таскается мышью или как-то черезчур плохо таскается.

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

Добавлено: 24 янв 2018, 21:09
Юрий
Что то мне неймётся. Переделал калькулятор прозрачности Transparency+vi. Быстродействие увеличилось в 8 раз. На самом примере не очень, но всё же чувствуется улучшение. Может, и у Вас ситуация улучшится?

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

Добавлено: 25 янв 2018, 08:15
dadreamer
Особо ничего почему-то не поменялось. Проблема с резким перемещением мыши осталась. Также в углах наблюдаются артефакты - чёрная полоса снизу и артефакты в левом верхнем и нижнем углах.

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

Добавлено: 25 янв 2018, 14:16
Юрий
<Также в углах наблюдаются артефакты - чёрная полоса снизу и артефакты в левом верхнем и нижнем углах.>
Это следствие не полностью отлаженного примера. Надо допилить контроль выхода окна за пределы картинки. Будет настроение и время сделаю. А, вот, как улучшить ситуацию с рваным перемещением окна это существенно, а мыслей пока нет. Собственно я уже могу успокоиться, поскольку в моей основной задаче окно статично. Просто при исследовании какой либо новой проблемы стараюсь рассмотреть все варианты (на будущее).

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

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

В маленьком кейсе, в True кадре провод идёт напрямую с селектора. В Value Change регистр проброшен напрямую. В Mouse Down/Up регистр не подключён (дефолт). Единственный косяк, который здесь возникает - когда юзер с нажатой кнопкой мыши переместил курсор за большую картинку и там отжал кнопку. Тогда при возвращении курсора обратно на большую картинку снова рисуется маска и прочее, т.е. кнопка "как бы" всё ещё нажата. Ну, я думаю, это можно обойти через одна-два условия в Mouse Up.

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

Добавлено: 25 янв 2018, 16:52
Юрий
Может, чего то я не до понял, но у меня никакого положительного эффекта.
<В Value Change регистр проброшен напрямую.> О каком Value Change идёт речь? Может, легче выложить свой вариант.

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

Добавлено: 25 янв 2018, 17:56
dadreamer

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

Добавлено: 25 янв 2018, 18:09
Юрий
Да, понял я правильно, именно так и сделал, но улучшения нет. В общем остаюсь при том же мнении, что дёрганья - из за задержек при перерисовке, и тут уж ничего не сделать.