Jump to content



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

 

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

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

 

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

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

 

Παράθεση

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

@grmiked

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

2d9230d37773499e81d8cd4ddcf3b7ff.jpeg

 

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

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

 

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

Θέλω αυτό

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));

 

Και αυτό εκτελείται όταν κάνει load το window ή το έχεις βάλει στο resize event που καλείται όταν γίνεται resize το παράθυρο?

(edited)

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

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

 

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

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

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

Έγινε επεξεργασία από UltraB

Μήπως έχει σημασία και ο container που έχεις πάνω στο frame και τα anchors του jlabel? Αν και πάνε χρόνια που έχω γράψει java.

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

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

Για πάμε...

 

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

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

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

 

(edited)

Αν δεν κάνω λάθος στο 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
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 απλά θα το παραμορφώσει.

 

πριν 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 που αναφέρω παραπάνω. Αν έχω χρόνο θα το ξαναδώ στην συνέχεια.

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

 

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

 

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

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

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

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

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)

 

 

Πρεπει να βαλεις το αρχειο στο classpath. Δοκιμασε "icons/snakes_ladders.png" και κανε clean και rebuild ή δες που ειναι το classpath απο τα properties του project.

  • Like 1
C:\Users\antonis\Documents\NetBeansProjects\SnakeAndLadders

Το είδα δοκιμάσει και με το "icons/snakes_ladders.png", πάλι το ίδιο πετάει.

Πιθανολογώ ότι ίσως φταίει που είναι BufferedImage (;)

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 σας , διαφορετικά θα υποθέσουμε ότι είστε εντάξει για να συνεχίσετε.