Effetto lente

Ho creato l'effetto lente per fornire una funzione coinvolgente per la sezione "Informazioni" dell'applicazione di crittografia dei file

Descrizione

La libreria consente l'applicazione di un effetto lente a un Java Swing JPanel

Per la versione v1.2, ho creato un'applicazione demo che visualizza l'obiettivo su un JFrame, che può essere trascinato su tutto lo schermo

Descrizione del codice

L'effetto lente viene creato utilizzando una trasformazione delle coordinate polari, in cui l'angolo rimane lo stesso e il raggio è allungato vicino al centro mentre viene compresso verso i bordi. Il raggio rimane invariato al centro e ai bordi

Viene quindi applicato un filtro di levigatura gaussiano con una dimensione di 3x3

Finestre

Lens Effect v1.1 (2015)

Scarica

Lens Effect v1.2 (2018)

Scarica

Lens Effect v1.3 (2019)

Guarda vdeo
Scarica

Versioni

image

Il piccolo effetto della lente di applicazione è stato il sottoprodotto di una pausa primaverile senza piani.

A quel tempo, stavo finendo di programmare la prima versione dell'encoder (File Encoder Application), e avevo bisogno di qualcosa di accattivante per la About...

L'idea originale non è mia, ma l'ho implementata sulla base di un effetto che avevo visto in una di quelle iconiche demo DOS.

Ho deciso di incapsulare l'effetto all'interno di un Java Swing JPanel per il mio progetto.

Tutto all'interno del pannello può essere ingrandito utilizzando una lente di ingrandimento posizionata alle coordinate scelte.

È stato particolarmente difficile garantire che il raffreddamento dei componenti del testo, specialmente quando si modifica la posizione del testo selezionato, non influenzasse negativamente l'aspetto visivo.

Quando si crea il LensJPanel, il contenuto del JPanel viene applicato all'elemento che subirà l'effetto di ingrandimento. È possibile specificare il raggio della lente di ingrandimento e se ingrandirà o diminuirà il contenuto.

Quando si ha il raggio e si determina se la lente di ingrandimento ingrandirà o restringerà il contenuto, viene creata una matrice quadrata bidimensionale con un elemento per ogni pixel quadrato contenente la lente di ingrandimento.
L'algoritmo calcola le coordinate del pixel sorgente corrispondente nell'immagine originale per ogni pixel di destinazione per determinare il colore quando si applica la trasformazione.
La trasformazione comporta una semplice trasformazione delle coordinate polari, motivo per cui viene utilizzata una lente di ingrandimento:
Un pixel viene calcolato da una posizione specifica del telaio dell'obiettivo e viene utilizzato per determinare il colore quando viene applicata la trasformazione.Il pixel sarà anche all'interno della cornice dell'obiettivo.Inoltre, viene calcolato il raggio dal centro dell'obiettivo all'angolo per un determinato pixel.Il pixel "origine" per il pixel che stiamo calcolando sarà alla stessa angolazione, ma il raggio cambierà.Il raggio va dallo 0% al 100% per i pixel “target” e “source”, con il 100% che rappresenta la lunghezza del raggio dell’obiettivo.Il pixel di origine viene calcolato per ogni pixel di destinazione mantenendo il suo angolo e trasformando il raggio utilizzando una funzione con una derivata monotonamente crescente. Questa trasformazione si verifica nell'intervallo tra 0 e 1, dove f(0) è uguale a 0 e f(1) è uguale 1. Qui, 0 rappresenta lo 0% del raggio dell'obiettivo e 1 rappresenta il 100% del raggio dell'obiettivo.Ciò significa che i raggi prenderanno il loro pixel sorgente da un raggio più piccolo, che espanderà il cerchio dell'obiettivo.Al di fuori del cerchio dell'obiettivo, la trasformazione sarà l'identità, il che significa che il pixel di origine non cambierà.


La spiegazione è un po 'confuso, ma se siete interessati a saperne di più sull'argomento, non esitate a contattarmi.

Spero che qualcuno lo trovi utile :-).

image

La nuova versione dell'applicazione presenta una finestra grafica circolare con un obiettivo mobile che può essere controllato facendo clic e trascinando con il mouse.
È possibile uscire dall'applicazione premendo ESC.

Un paio di problemi sono evidenti:

  • È impossibile aggiornare frequentemente lo sfondo ampliato poiché, per scattare uno screenshot, devi impostare la finestra come trasparente, il che causa un fastidioso sfarfallio.
  • L'immagine è abbastanza pixelata, soprattutto nella parte centrale della lente di ingrandimento.
image

La nuova versione dell'applicazione risolve un bug di trasparenza che si è verificato sui sistemi operativi Mac e Linux.

L'ultima versione risolve anche il problema di pixelazione trovato nelle versioni precedenti.

Ciò si ottiene applicando un filtro di levigatura gaussiano all'immagine dell'obiettivo, creando un effetto sfocato che riduce la pixelazione causata dall'ingrandimento.

L'ultima versione disponibile di questa versione funziona sia con Java-8 che con Java-11.

Video

Scaricamenti