2012-01-14 13 views
6

Ho un'immagine. Ho bisogno di fare una copia esatta di esso e salvarlo in BufferedImage, ma non c'è Image.clone(). La cosa dovrebbe essere all'interno di un ciclo di calcolo e quindi dovrebbe essere molto veloce, nessuna copia pixel-per-pixel. Qual è il migliore metodo di perfomance per fare questo?Come clonare l'immagine?

+1

Dai un'occhiata a questo http://stackoverflow.com/questions/3514158/how-do-you-clone-a-bufferedimage – user219882

+1

Copia immagine pixel-di -pixel (copia solo i dati raster). C'è un modo per farlo più velocemente? – Cenius

+0

Se vuoi una copia profonda, non c'è altro modo di cui io sappia. E perché vuoi clonarlo ogni ciclo iterativo? – user219882

risposta

7

È possibile disegnare su un'immagine bufferizzata, quindi creare un vuoto bufferedImage, creare un contesto grafico da esso e disegnare l'immagine originale su di esso.

BufferedImage copyOfImage = 
    new BufferedImage(widthOfImage, heightOfImage, BufferedImage.TYPE_INT_RGB); 
Graphics g = copyOfImage.createGraphics(); 
g.drawImage(originalImage, 0, 0, null); 
+1

Ciò perderebbe la trasparenza. In caso di dubbio, usa 'TYPE_INT_ARGB'. –

+0

Hm ... Questo sembra più veloce per me. – Cenius

+0

Ricorda sempre di 'dispose()' l'oggetto 'Graphics' dopo l'uso! – haraldK

0

c'è un altro modo:

BufferedImage copyOfImage = image.getSubimage(0, 0, image.getWidth, image.getHeight); 
+2

No, questo non funzionerà, dato che 'copyOfImage' e' image' condivideranno i buffer di backup (sarà una copia superficiale). Le modifiche fatte a una, si rifletteranno nell'altra. – haraldK

0

Image clone = original.getScaledInstance(original.getWidth(), -1, Image.SCALE_DEFAULT);

Questo potrebbe non essere molto bella, ma getScaledInstance rendimenti, come suggerisce il nome, un'istanza della Image dell'oggetto originale. Solitamente utilizzato solo per il ridimensionamento. -1 indica il metodo per mantenere le proporzioni come è

+1

Potresti per favore [modificare] la tua risposta per dare una spiegazione del perché questo codice risponde alla domanda? Le risposte al solo codice sono [scoraggiate] (http://meta.stackexchange.com/questions/148272), perché non insegnano la soluzione. – DavidPostill