Εφέ φακού

Δημιούργησα το εφέ φακού για να παράσχω ένα ελκυστικό χαρακτηριστικό για την ενότητα "About" της εφαρμογής κρυπτογράφησης αρχείων

Περιγραφή

Η βιβλιοθήκη επιτρέπει την εφαρμογή ενός εφέ φακού σε ένα Java Swing JPanel

Για την έκδοση v1.2, δημιούργησα μια εφαρμογή επίδειξης που εμφανίζει το φακό σε ένα JFrame, το οποίο μπορεί να συρθεί σε ολόκληρη την οθόνη

Περιγραφή κώδικα

Το φαινόμενο του φακού δημιουργείται χρησιμοποιώντας ένα πολικό μετασχηματισμό συντεταγμένων, όπου η γωνία παραμένει η ίδια, και η ακτίνα επιμηκύνεται κοντά στο κέντρο ενώ συμπιέζεται προς τις άκρες.

Στη συνέχεια εφαρμόζεται ένα φίλτρο εξομάλυνσης Gaussian με μέγεθος 3x3

Παράθυρα

Εφέ φακού v1.1 (2015)

Λήψη

Εφέ φακού v1.2 (2018)

Λήψη

Εφέ φακού v1.3 (2019)

Watch vdeo (στα Αγγλικά)
Λήψη

Εκδόσεις

image

Το μικρό εφέ φακού εφαρμογής ήταν το υποπροϊόν μιας ανοιξιάτικης διακοπής χωρίς σχέδια.

Εκείνη την εποχή, τελείωνα τον προγραμματισμό της πρώτης έκδοσης του κωδικοποιητή (File Encoder Application), και χρειαζόμουν κάτι πιασάρικο για το About...

Η αρχική ιδέα δεν είναι δική μου, αλλά την υλοποίησα με βάση ένα εφέ που είχα δει σε ένα από εκείνα τα εικονικά demos του DOS.

Αποφάσισα να ενθυλακώσω την επίδραση μέσα σε ένα Java Swing JPanel για το έργο μου.

Τα πάντα μέσα στον πίνακα μπορούν να μεγεθυνθούν χρησιμοποιώντας ένα μεγεθυντικό φακό τοποθετημένο στις επιλεγμένες συντεταγμένες σας.

Ήταν ιδιαίτερα δύσκολο να διασφαλιστεί ότι η ανανέωση των συστατικών του κειμένου, ειδικά κατά την τροποποίηση της θέσης του επιλεγμένου κειμένου, δεν επηρέασε αρνητικά την οπτική εμφάνιση.

Όταν δημιουργείτε το LensJPanel, το περιεχόμενο του JPanel εφαρμόζεται στο στοιχείο που θα υποστεί το μεγεθυντικό αποτέλεσμα. Μπορείτε να καθορίσετε την ακτίνα του μεγεθυντικού φακού και αν θα μεγεθύνει ή θα μειώσει το περιεχόμενο.

Όταν έχετε την ακτίνα και καθορίζετε αν ο μεγεθυντικός φακός θα μεγεθύνει ή θα συρρικνώσει το περιεχόμενο, δημιουργείται μια δισδιάστατη τετράγωνη μήτρα με ένα στοιχείο για κάθε τετραγωνικό εικονοστοιχείο που περιέχει τον μεγεθυντικό φακό.
Ο αλγόριθμος υπολογίζει τις συντεταγμένες του αντίστοιχου πηγαίου εικονοστοιχείου στην αρχική εικόνα για κάθε εικονοστοιχείο προορισμού για να καθορίσει το χρώμα κατά την εφαρμογή του μετασχηματισμού.
Ο μετασχηματισμός περιλαμβάνει έναν απλό πολικό μετασχηματισμό συντεταγμένων, γι' αυτό και χρησιμοποιείται ένας μεγεθυντικός φακός:
Ένα εικονοστοιχείο υπολογίζεται από μια συγκεκριμένη θέση του πλαισίου του φακού και χρησιμοποιείται για τον προσδιορισμό του χρώματος όταν εφαρμόζεται ο μετασχηματισμός.Το εικονοστοιχείο θα βρίσκεται επίσης μέσα στο πλαίσιο του φακού.Επιπλέον, υπολογίζεται η ακτίνα από το κέντρο του φακού μέχρι τη γωνία για ένα δεδομένο εικονοστοιχείο.Το εικονοστοιχείο "προέλευσης" για το εικονοστοιχείο που υπολογίζουμε θα είναι στην ίδια γωνία, αλλά η ακτίνα θα αλλάξει.Η ακτίνα εκτείνεται από 0% έως 100% τόσο για τα εικονοστοιχεία «στόχος» όσο και «πηγή», με το 100% να αντιπροσωπεύει το μήκος της ακτίνας του φακού.Το πηγαίο εικονοστοιχείο υπολογίζεται για κάθε εικονοστοιχείο-στόχο διατηρώντας τη γωνία του και μετατρέποντας την ακτίνα χρησιμοποιώντας μια συνάρτηση με μονοτονικά αυξανόμενο παράγωγο. Αυτός ο μετασχηματισμός συμβαίνει στο διάστημα μεταξύ 0 και 1, όπου το f(0) ισούται με 0 και το f(1) ισούται με 1. Εδώ, το 0 αντιπροσωπεύει το 0% της ακτίνας του φακού, και το 1 αντιπροσωπεύει το 100% της ακτίνας του φακού.Αυτό σημαίνει ότι οι ακτίνες θα πάρουν το πηγαίο εικονοστοιχείο τους από μικρότερη ακτίνα, η οποία θα επεκτείνει τον κύκλο του φακού.Έξω από τον κύκλο του φακού, η μεταμόρφωση θα είναι η ταυτότητα, που σημαίνει ότι το πηγαίο εικονοστοιχείο δεν θα αλλάξει.


Η εξήγηση είναι λίγο συγκεχυμένη, αλλά αν σας ενδιαφέρει να μάθετε περισσότερα για το θέμα, μη διστάσετε να επικοινωνήσετε μαζί μου.

Ελπίζω κάποιος να το βρει χρήσιμο :-).

image

Η νέα έκδοση της εφαρμογής διαθέτει ένα κυκλικό γραφικό παράθυρο με κινητό φακό που μπορεί να ελεγχθεί κάνοντας κλικ και σύροντας με το ποντίκι σας.
Μπορείτε να βγείτε από την εφαρμογή πατώντας ESC.

Μερικά προβλήματα είναι εμφανή:

  • Είναι αδύνατο να ανανεώσετε συχνά το διευρυμένο φόντο αφού, για να τραβήξετε ένα στιγμιότυπο οθόνης, πρέπει να ρυθμίσετε το παράθυρο ως διαφανές, γεγονός που προκαλεί ένα ενοχλητικό τρεμόπαιγμα.
  • Η εικόνα είναι αρκετά pixelated, ειδικά στο κεντρικό τμήμα του μεγεθυντικού γυαλιού.
image

Η νέα έκδοση της εφαρμογής αντιμετωπίζει ένα σφάλμα διαφάνειας που συνέβη σε λειτουργικά συστήματα Mac και Linux.

Η τελευταία έκδοση ασχολείται επίσης με το θέμα εικονοστοιχείων που βρέθηκε σε προηγούμενες εκδόσεις.

Αυτό επιτυγχάνεται με την εφαρμογή ενός φίλτρου λείανσης Gaussian στην εικόνα του φακού, δημιουργώντας ένα θολό αποτέλεσμα που μειώνει την εικονοστοιχία που προκαλείται από τη μεγέθυνση.

Η τελευταία διαθέσιμη υποέκδοση αυτής της έκδοσης λειτουργεί τόσο με το Java-8 όσο και με το Java-11.

Βίντεο

Λήψεις