Jump to content



Βοήθεια με την χρήση του Imgscalr, Listeners και ότι άλλο προκύψει


Recommended Posts

Μήπως μπορεί να με βοηθήσει κάποιος με το πως το χρησιμοποιούμε και πως το κάνουμε install την Imgscalr στο project μας;

 

Έχω ένα JLabel που εντός του θέλω να βάλω μια εικόνα η οποία θα γίνεται resize στο μέγεθος του JLabel.

Προφανώς θέλω να κρατάει το aspect ratio της.

File image = new File("src/icons/xxxxxxx.png");
BufferedImage img = ImageIO.read(image);
BufferedImage scaledImg;
scaledImg = Scalr.resize(img, Method.SPEED, Mode.FIT_EXACT, logoLabel.getWidth(), logoLabel.getHeight(), Scalr.OP_ANTIALIAS);

Χτυπάει στο παρακάτω:

3970a26dd664483f83ca5ee4386a6756.jpeg

 

Ευχαριστώ για το χρόνο σας!

Link to comment
Share on other sites

Αν είναι η ίδια βιβλιοθήκη που έχεις βάλει

 

https://github.com/rkalla/imgscalr/blob/master/src/main/java/org/imgscalr/Scalr.java

 

απο εκεί βλέπεις ότι και το Method και το Speed είναι static enums μέσα στο class Scalr. Χωρίς να είμαι java guru δοκίμασε με Scalr.Method.SPEED και Scalr.Mode.FIT_EXACT

Link to comment
Share on other sites

Αν δεν δουλέψει το παραπάνω που απο ότι φαίνεται λάθος είναι

 

Παράθεση

Δοκίμασε με το όνομα του package εκτός και αν το έχεις κάνει import με .* στην αρχή του java αρχείου

@grmiked

Link to comment
Share on other sites

Προσπαθώ από χθες για να βγάλω αυτό, τι φάση;

2d9230d37773499e81d8cd4ddcf3b7ff.jpeg

 

Έτσι θα έπρεπε να είναι; Πως θα το κάνω να μην μου κόβει την εικόνα; Αυτό θέλω.

Αυτό που κάνει τώρα το έκανα και με μια γραμμή και χωρίς επιπλέον βιβλιοθήκες. 

 

Απορώ δηλαδή γιατί δεν κάνω ένα resize την εικόνα στο PS να τελειώνω...

Link to comment
Share on other sites

Θέλω αυτό

a7ca113afaa4455a88829dd3a00bc6ec.jpeg

Και το έχω κάνει με το μπακαλίστικο τρόπο

File logoImage = new File("src/icons/snakes_ladders.png");
BufferedImage img = ImageIO.read(logoImage);
BufferedImage scaledImg;
scaledImg = Scalr.resize(img, Scalr.Method.QUALITY, Scalr.Mode.AUTOMATIC, logoLabel.getWidth()-80, logoLabel.getHeight(), Scalr.OP_ANTIALIAS);
logoLabel.setIcon(new ImageIcon(scaledImg));

 

Link to comment
Share on other sites

Λέω να βγάλω το resize από το αρχικό panel. Θα το έχω απλά για να μου δίνει ένα όνομα ο παίκτης και να επιλέγει τι χρώμα πιόνι θέλει.

Αφού τα επιλέξει θα τον πηγαίνω σε άλλο frame όπου θα υπάρχει το main παιχνίδι.

 

Απλά δε μπορώ να καταλάβω τι παίζει με το resize των εικόνων. Έχω 3 διαφορετικά που παίζουν αλλά κανένα δε κάνει αυτό που θέλω.

Έχω ένα που κάνει σχεδόν το ίδιο πράγμα σε μια γραμμή και ένα που το έσβησα που είχε πάλι method κλπ, χωρίς όμως τη χρήση Scalr.

Γι αυτό τα είχα βγάλει και από το αρχικό, αφού και πριν που τα είχα δεν έπαιζε, αν και μάλον είχα είχα κάνει λάθος το installation του.

Έγινε επεξεργασία από UltraB
Link to comment
Share on other sites

Προς το παρόν θα το αφήσω έτσι για να συνεχίσω παρακάτω και αν έχω χρόνο θα το ξαναδώ.

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

Link to comment
Share on other sites

Για πάμε...

 

Έχω ένα JPanel το secondRowPanel  του οποιού τα στοιχεία θέλω να είναι στοιχισμένα στο κέντρο, και κάθετα αλλά και οριζόντια.

Δοκίμασα με το παρακάτω αλλά δεν κάνει απολύτως τίποτα και προφανώς απ ότι καταλαβαίνω θα πρέπει να το βάζω για κάθε στοιχείο ξεχωριστά.

nameLabel.setVerticalAlignment(JLabel.CENTER);
nameLabel.setHorizontalAlignment(JLabel.CENTER);

 

Link to comment
Share on other sites

Αν δεν κάνω λάθος στο horizontal alignment είναι left,center,middle. Στο vertical alignment top,middle,bottom. Και πάλι το σημαντικό είναι ποιον layout manager χρησιμοποιείς, υποθέτω είσαι σε swing έτσι? Το JPanel σου ποιόν layout manager χρησιμοποιεί?

 

https://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html

 

 

Έγινε επεξεργασία από nucleus
Link to comment
Share on other sites

On 4/10/2017 at 4:37 ΜΜ, το μέλος UltraB έγραψε:

Θέλω αυτό

Και το έχω κάνει με το μπακαλίστικο τρόπο


File logoImage = new File("src/icons/snakes_ladders.png");
BufferedImage img = ImageIO.read(logoImage);
BufferedImage scaledImg;
scaledImg = Scalr.resize(img, Scalr.Method.QUALITY, Scalr.Mode.AUTOMATIC, logoLabel.getWidth()-80, logoLabel.getHeight(), Scalr.OP_ANTIALIAS);
logoLabel.setIcon(new ImageIcon(scaledImg));

 

 

Έχεις δοκιμάσει με Scalr.Mode.FIT_EXACT ή με το FIT_TO_HEIGHT;

Έχω τη εντύπωση ότι δεν γίνεται σωστά resize επειδή κρατάει το aspect ratio. Με το fix_exact απλά θα το παραμορφώσει.

 

Link to comment
Share on other sites

πριν 40 λεπτά, το μέλος nucleus έγραψε:

Αν δεν κάνω λάθος στο horizontal alignment είναι left,center,middle. Στο vertical alignment top,middle,bottom. Και πάλι το σημαντικό είναι ποιον layout manager χρησιμοποιείς, υποθέτω είσαι σε swing έτσι? Το JPanel σου ποιόν layout manager χρησιμοποιεί?

 

https://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html

Δε θα έπρεπε να πετάει σφάλμα άμα ήταν συντακτικό; Θα το ψάξω και πάλι να δω.

To mainPanel έχει ένα gridLayout 3x1 και στη δεύτερη και τρίτη γραμμή έχω στην καθεμία από ένα JPanel.

Της τελευταίας λοιπόν τα στοιχεία του Jpanel θέλω να είναι στοιχισμένα στο κέντρο.

 

Χρησιμοποιώ σε όλα swing εκτός από εικόνες και χρώματα που είναι awt.

Μπορώ να χρησιμοποιήσω και κάποιον άλλο ή ο καθένας είναι για διαφορετικά components;

πριν 6 λεπτά, το μέλος defiant έγραψε:

Έχεις δοκιμάσει με Scalr.Mode.FIT_EXACT ή με το FIT_TO_HEIGHT;

Έχω τη εντύπωση ότι δεν γίνεται σωστά resize επειδή κρατάει το aspect ratio. Με το fix_exact απλά θα το παραμορφώσει.

Ναι, τα είχα δοκιμάσει όλα και τελικά το άφησα με το logoLabel.getWidth()-80 που αναφέρω παραπάνω. Αν έχω χρόνο θα το ξαναδώ στην συνέχεια.

Link to comment
Share on other sites

Το κάθε JPanel έχει και αυτό layout manager αν θυμάμαι καλα. Στο τελευταίο τι το έχεις βάλει? Αν το βάλεις σε GridLayout

 

https://docs.oracle.com/javase/tutorial/uiswing/layout/grid.html

 

και μετά δεις το παρακάτω παράδειγμα https://docs.oracle.com/javase/tutorial/uiswing/components/label.html

Link to comment
Share on other sites

Στο τελευταίο δεν έχω βάλει κάποιο layout. Δοκίμασα διάφορες υλοποιήσεις με το BorderLayout αλλά τα έβγαζε αρκετά χάλια.

Βασικά έτσι όπως είναι τώρα το μόνο που θέλω είναι να πάνε κάθετα στο κέντρο του τελευταίου JPanel καθώς οριζόντια βγαίνουν στη μέση.

Link to comment
Share on other sites

Θέλω να μετατρέψω το παρακάτω

File logoImage = new File("src/icons/snakes_ladders.png");
BufferedImage img = ImageIO.read(logoImage);
BufferedImage scaledImg;
scaledImg = Scalr.resize(img, Scalr.Method.QUALITY, Scalr.Mode.AUTOMATIC, logoLabel.getWidth() - 80, logoLabel.getHeight(), Scalr.OP_ANTIALIAS);
logoLabel.setIcon(new ImageIcon(scaledImg));

και να το κάνω με getClass, getResource ώστε να μην έχει πρόβλημα με την αλλαγή path και να μη χτυπάει και το jar

BufferedImage img = ImageIO.read(getClass().getResource("src/icons/snakes_ladders.png"));
BufferedImage scaledImg;
scaledImg = Scalr.resize(img, Scalr.Method.QUALITY, Scalr.Mode.AUTOMATIC, logoLabel.getWidth() - 80, logoLabel.getHeight(), Scalr.OP_ANTIALIAS);
logoLabel.setIcon(new ImageIcon(scaledImg));

Αλλά το δεύτερο μου βγάζει: 

Exception in thread "main" java.lang.IllegalArgumentException: input == null!
	at javax.imageio.ImageIO.read(ImageIO.java:1388)
	at SnakeAndLadders.IntroPanel.<init>(IntroPanel.java:115)
	at SnakeAndLadders.Main.main(Main.java:19)
C:\Users\antonis\AppData\Local\NetBeans\Cache\8.1\executor-snippets\run.xml:53: Java returned: 1
BUILD FAILED (total time: 1 second)

Καμιά ιδέα;

PS: Το ίδιο πετούσε στο jarμε τον πρώτο τρόπο που δούλευε κανονικά στο Netbeans.

Spoiler

Exception in thread "main" javax.imageio.IIOException: Can't read input file!
        at javax.imageio.ImageIO.read(Unknown Source)
        at SnakeAndLadders.IntroPanel.<init>(IntroPanel.java:115)
        at SnakeAndLadders.Main.main(Main.java:19)

 

 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Δημιουργία...

Important Information

Ο ιστότοπος theLab.gr χρησιμοποιεί cookies για να διασφαλίσει την καλύτερη εμπειρία σας κατά την περιήγηση. Μπορείτε να προσαρμόσετε τις ρυθμίσεις των cookies σας , διαφορετικά θα υποθέσουμε ότι είστε εντάξει για να συνεχίσετε.