Ефект об' єктива

Я створив ефект лінзи для того, щоб надати захоплюючу можливість для розділу " Про " програми шифрування файлів

Опис

Бібліотека надає змогу застосовувати ефект лінзи до Java Swing JPanelName

Для версії v1.2 я створив демонстраційну програму, яка показує лінзу на JFrame, яку можна перетягнути по всьому екрані.

Опис коду

Ефект об' єктива створюється за допомогою полярного перетворення координат, де кут залишається однаковим, а радіус видовжується поряд з центром під час стискання до країв. Радіус залишається незмінним у центрі і краях.

Фільтр згладжування Гаусового з розміром 3x3 буде застосованоName

Вікна

Ефект об' єктива v1. 1 (2015)

Звантажити

Ефект об' єктива v1. 2208)

Звантажити

Ефект об' єктива v1. 3209)

Спостерігати за vídeo
Звантажити

Версії

image

Невеличкий ефект застосувань був побічним продуктом весняної перерви без жодних планів.

Тоді я закінчував програмування першої версії кодера (File Encoder Application), і мені було потрібно щось привабливе для...

Початкова ідея не моя, але я втілив її на основі ефекту, який я бачив в одній з цих піктограмових демонстрацій DOS.

Я вирішив внести цей вклад у Jwan Swing JPanel для мого проекту.

Все всередині панелі можна збільшити за допомогою збільшувального скла, розташованого у обраних вами координатах.

Особливо важко було переконатися, що текстові компоненти, особливо зміни місця розташування тексту, не впливали на зовнішній вигляд.

Після створення LensJPanel, вміст JPanel буде застосовано до елемента, який отримуватиме ефект збільшення. Ви можете вказати радіус скла збільшення і те, чи буде воно збільшити або зменшити вміст.

Якщо у вас є радіус і ви визначаєте чи збільшувальне скло збільшить чи зменшить вміст, двовимірну квадратну матрицю буде створено з одним елементом для кожного квадратного пікселя, що містить збільшувальне скло.
Алгоритм обчислює координати відповідного початкового піксела у початковому зображенні, щоб кожен піксел призначення визначав колір під час застосування перетворення.
Це перетворення включає в себе просте полярне перетворення координат, ось чому використовуються лінзи збільшення:
Піксель обчислюється з певної позиції рамки об' єктива і використовується для визначення кольору під час застосування перетворення.Піксель також буде в кадрі об'єктива.Крім того, обчислюють радіус від центру лінзи до кута для заданого піксела.Точковий піксел для піксела, який ми розраховуємо, буде в тому ж куті, але радіус зміниться.Радіус проходить від 0% до 100% для обох частин, як і далі, так і з 100%, що відповідає довжині радіуса об'єктив.Піксель- джерело обчислюється для кожного з пікселів призначення шляхом підтримання його кута і перетворення радіуса за допомогою функції з монотонічним збільшенням похідної. Це перетворення відбувається у проміжку між 0 і 1, де f} 0 і f} 1) дорівнює 1. У цьому випадку 0 відповідає 0% радіусу лінз, а 1 відповідає 100% радіусу об' єктива.Це означає, що радіус візьме їх вихідні пікселі від меншого радіуса, що розширить коло лінзи.Поза колом об' єктива, перетворенням буде профіль, що означає, що піксель джерела не змінюватиметься.


Пояснення дещо заплутане, але якщо ви хочете більше дізнатися про цю тему, не вагайтеся зв'язатися зі мною.

Сподіваюся, що хтось знайде її корисною: -).

image

У новій версії програми передбачено кругове графічне вікно з рухомою лінзою, яким можна керувати за допомогою натискання і перетягування вказівника миші.
Ви можете вийти з програми натисканням ESC.

Кілька проблем очевидні:

  • Неможливо часто освіжити збільшене тло, оскільки, щоб зробити знімок екрана, вам слід зробити вікно прозорим, що призводить до набридливого блимання.
  • Зображення досить пікселізоване, особливо в центральній частині збільшувального скла.
image

Нова версія програми посилається на ваду прозорості, яка сталася у операційних системах Mac і Linux.

Остання версія також стосується проблеми пікселювання, знайденого в попередніх версіях.

Це можна зробити, застосовуючи Гаусове згладжування до зображення об' єктива, створюючи ефект розмивання, що зменшує піксельність, спричинену збільшенням.

Найсвіжіші версії цієї версії працюють як з Java- 8, так і з Java- 11.

Відео

Звантаження