UltraB Δημοσιεύτηκε Απρίλιος 9, 2017 #1 Δημοσιεύτηκε Απρίλιος 9, 2017 Μήπως μπορεί να με βοηθήσει κάποιος με το πως το χρησιμοποιούμε και πως το κάνουμε 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); Χτυπάει στο παρακάτω: Ευχαριστώ για το χρόνο σας!
UltraB Απρίλιος 9, 2017 Author #2 Απρίλιος 9, 2017 Ένα mention σε μερικά άτομα που ίσως μπορούν να βοηθήσουν: @nucleus, @unseen
nucleus Απρίλιος 10, 2017 #3 Απρίλιος 10, 2017 Αν είναι η ίδια βιβλιοθήκη που έχεις βάλει 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
nucleus Απρίλιος 10, 2017 #4 Απρίλιος 10, 2017 Αν δεν δουλέψει το παραπάνω που απο ότι φαίνεται λάθος είναι Παράθεση Δοκίμασε με το όνομα του package εκτός και αν το έχεις κάνει import με .* στην αρχή του java αρχείου @grmiked
UltraB Απρίλιος 10, 2017 Author #5 Απρίλιος 10, 2017 Προσπαθώ από χθες για να βγάλω αυτό, τι φάση; Έτσι θα έπρεπε να είναι; Πως θα το κάνω να μην μου κόβει την εικόνα; Αυτό θέλω. Αυτό που κάνει τώρα το έκανα και με μια γραμμή και χωρίς επιπλέον βιβλιοθήκες. Απορώ δηλαδή γιατί δεν κάνω ένα resize την εικόνα στο PS να τελειώνω...
UltraB Απρίλιος 10, 2017 Author #7 Απρίλιος 10, 2017 Θέλω αυτό Και το έχω κάνει με το μπακαλίστικο τρόπο 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));
nucleus Απρίλιος 10, 2017 #8 Απρίλιος 10, 2017 Και αυτό εκτελείται όταν κάνει load το window ή το έχεις βάλει στο resize event που καλείται όταν γίνεται resize το παράθυρο?
UltraB Απρίλιος 10, 2017 Author #9 Απρίλιος 10, 2017 (edited) Λέω να βγάλω το resize από το αρχικό panel. Θα το έχω απλά για να μου δίνει ένα όνομα ο παίκτης και να επιλέγει τι χρώμα πιόνι θέλει. Αφού τα επιλέξει θα τον πηγαίνω σε άλλο frame όπου θα υπάρχει το main παιχνίδι. Απλά δε μπορώ να καταλάβω τι παίζει με το resize των εικόνων. Έχω 3 διαφορετικά που παίζουν αλλά κανένα δε κάνει αυτό που θέλω. Έχω ένα που κάνει σχεδόν το ίδιο πράγμα σε μια γραμμή και ένα που το έσβησα που είχε πάλι method κλπ, χωρίς όμως τη χρήση Scalr. Γι αυτό τα είχα βγάλει και από το αρχικό, αφού και πριν που τα είχα δεν έπαιζε, αν και μάλον είχα είχα κάνει λάθος το installation του. Έγινε επεξεργασία Απρίλιος 10, 2017 από UltraB
nucleus Απρίλιος 11, 2017 #10 Απρίλιος 11, 2017 Μήπως έχει σημασία και ο container που έχεις πάνω στο frame και τα anchors του jlabel? Αν και πάνε χρόνια που έχω γράψει java.
UltraB Απρίλιος 11, 2017 Author #11 Απρίλιος 11, 2017 Προς το παρόν θα το αφήσω έτσι για να συνεχίσω παρακάτω και αν έχω χρόνο θα το ξαναδώ. Λογικά θα μαζευτούν και άλλες απορίες, προβλήματα κλπ οπότε ίσως ζητήσω αλλαγή στον τίτλο να τα έχω εδώ μαζεμένα.
UltraB Απρίλιος 11, 2017 Author #12 Απρίλιος 11, 2017 Για πάμε... Έχω ένα JPanel το secondRowPanel του οποιού τα στοιχεία θέλω να είναι στοιχισμένα στο κέντρο, και κάθετα αλλά και οριζόντια. Δοκίμασα με το παρακάτω αλλά δεν κάνει απολύτως τίποτα και προφανώς απ ότι καταλαβαίνω θα πρέπει να το βάζω για κάθε στοιχείο ξεχωριστά. nameLabel.setVerticalAlignment(JLabel.CENTER); nameLabel.setHorizontalAlignment(JLabel.CENTER);
nucleus Απρίλιος 11, 2017 #13 Απρίλιος 11, 2017 (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 Έγινε επεξεργασία Απρίλιος 11, 2017 από nucleus
defiant Απρίλιος 11, 2017 #14 Απρίλιος 11, 2017 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 απλά θα το παραμορφώσει.
UltraB Απρίλιος 11, 2017 Author #15 Απρίλιος 11, 2017 πριν 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 που αναφέρω παραπάνω. Αν έχω χρόνο θα το ξαναδώ στην συνέχεια.
nucleus Απρίλιος 11, 2017 #16 Απρίλιος 11, 2017 Το κάθε JPanel έχει και αυτό layout manager αν θυμάμαι καλα. Στο τελευταίο τι το έχεις βάλει? Αν το βάλεις σε GridLayout https://docs.oracle.com/javase/tutorial/uiswing/layout/grid.html και μετά δεις το παρακάτω παράδειγμα https://docs.oracle.com/javase/tutorial/uiswing/components/label.html
UltraB Απρίλιος 11, 2017 Author #17 Απρίλιος 11, 2017 Στο τελευταίο δεν έχω βάλει κάποιο layout. Δοκίμασα διάφορες υλοποιήσεις με το BorderLayout αλλά τα έβγαζε αρκετά χάλια. Βασικά έτσι όπως είναι τώρα το μόνο που θέλω είναι να πάνε κάθετα στο κέντρο του τελευταίου JPanel καθώς οριζόντια βγαίνουν στη μέση.
UltraB Απρίλιος 11, 2017 Author #18 Απρίλιος 11, 2017 Θέλω να μετατρέψω το παρακάτω 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)
defiant Απρίλιος 11, 2017 #19 Απρίλιος 11, 2017 Πρεπει να βαλεις το αρχειο στο classpath. Δοκιμασε "icons/snakes_ladders.png" και κανε clean και rebuild ή δες που ειναι το classpath απο τα properties του project. 1
UltraB Απρίλιος 12, 2017 Author #20 Απρίλιος 12, 2017 C:\Users\antonis\Documents\NetBeansProjects\SnakeAndLadders Το είδα δοκιμάσει και με το "icons/snakes_ladders.png", πάλι το ίδιο πετάει. Πιθανολογώ ότι ίσως φταίει που είναι BufferedImage (;)
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now