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