Phil, non so quale soluzione alla fine si è andato con, ma le immagini di scala in Java può guardare piuttosto bene se:
- tipi Evitare BufferedImage che non sono ben supportate dal JDK.
- Usa incrementale ridimensionamento
- Stick per Bicubica quando si utilizza incrementale ridimensionamento
ho fatto una congrua parte di test con questi metodi e la scala incrementale lungo con attenersi a tipi di immagine ben supportati è la chiave - - Vedo che Alexander ha detto che non ha ancora avuto fortuna con quello che è un peccato.
Ho rilasciato lo imgscalr library (Apache 2) circa 6 mesi fa per risolvere il problema di "Voglio copie di questa immagine in bella scala, FARLO ORA!" dopo aver letto qualcosa come 10 domande come questa su SO.
utilizzo standard assomiglia:
BufferedImage img = ImageIO.read(...); // load image
BufferedImage scaledImg = Scalr.resize(img, 640);
Il secondo argomento è la larghezza e l'altezza di delimitazione imgscalr utilizzerà per ingrandire l'immagine - mantenendo le proporzioni corrette, anche se hai superato in dimensioni non valide - ci sono molti more detailed methods, ma questo è l'utilizzo più semplice.
Il caso d'uso si vorrebbe, per esempio se Facebook immagini limitate a 800x600 pixel, sarebbe simile a questa:
BufferedImage img = ImageIO.read(...); // load image
BufferedImage scaledImg = Scalr.resize(img, Method.QUALITY, 800, 600);
che garantirà l'immagine rimane nel tipo di immagine migliore supportato e scalato con la metodo di alta qualità che Java può radunare.
Nel mio test ad alta risoluzione non ho notato alcuna discrepanza con le immagini in scala utilizzando questa libreria/questi metodi ECCETTO quando l'immagine viene inserita in un tipo di immagine supportato male dal caricatore ImageIO - ad esempio, questo accade molto con le GIF. Se li si lascia così e non li uscire da quei tipi poco supportati, si finisce per guardare davvero retinato e terribile.
La ragione di ciò è che il team Java2D ha effettivamente pipeline accelerate hardware differenti per tutti i diversi tipi di BufferedImages che il JDK può elaborare - un sottoinsieme di quei tipi di immagine che sono meno comuni ricadono tutti nello stesso software rendering della pipeline sotto le copertine in Java2D, con conseguente immagini scadenti e talvolta totalmente errate. Questo è stato un PIA da spiegare e cercare di capire che ho appena scritto quella logica direttamente nella libreria.
I due tipi più supportati sono BufferedImage.TYPE_INT_RGB e _ARGB se siete curiosi.
Speravo di evitare una chiamata esterna ma penso che potresti avere ragione. Sembra che Java non abbia ancora ottenuto l'elaborazione delle immagini! –
Questa è la mia conclusione pure! Le immagini apis di Java fanno schifo! Posso aggirare la lentezza, ma la scarsa qualità dell'immagine non è accettabile! Spero che gli apis pertinenti ottengano qualche tanto bisogno di TLC insieme a JavaFX 2.0. – Kimble
Ovviamente non hai trovato [java-image-scaling] (http://code.google.com/p/java-image-scaling/). –