2012-03-04 3 views
16

Ho cercato di capire come capovolgere un'immagine per un po ', ma non ho ancora capito.Flip Image with Graphics2D

sto usando Graphics2D per disegnare un'immagine con

g2d.drawImage(image, x, y, null) 

Ho solo bisogno di un modo per capovolgere l'immagine lungo l'asse orizzontale o verticale.

Se si vuole si può avere uno sguardo alla sorgente completo su GitHub (link)

EDIT: Woops, volevo mettere 'Flip' nel titolo, non e 'Ruota'.

+3

Invece di avere noi guardare la vostra intera sorgente, fare un [SSCCE] (http://sscce.org) . – Jeffrey

+1

Se cerchi google "Grafica2D ruota immagine" troverai un sacco di tutorial – DNA

risposta

48

Da http://examples.javacodegeeks.com/desktop-java/awt/image/flipping-a-buffered-image:

// Flip the image vertically 
AffineTransform tx = AffineTransform.getScaleInstance(1, -1); 
tx.translate(0, -image.getHeight(null)); 
AffineTransformOp op = new AffineTransformOp(tx, AffineTransformOp.TYPE_NEAREST_NEIGHBOR); 
image = op.filter(image, null); 


// Flip the image horizontally 
tx = AffineTransform.getScaleInstance(-1, 1); 
tx.translate(-image.getWidth(null), 0); 
op = new AffineTransformOp(tx, AffineTransformOp.TYPE_NEAREST_NEIGHBOR); 
image = op.filter(image, null); 

// Flip the image vertically and horizontally; equivalent to rotating the image 180 degrees 
tx = AffineTransform.getScaleInstance(-1, -1); 
tx.translate(-image.getWidth(null), -image.getHeight(null)); 
op = new AffineTransformOp(tx, AffineTransformOp.TYPE_NEAREST_NEIGHBOR); 
image = op.filter(image, null); 
+1

+1 per '-1' :-) Un esempio correlato è menzionato [qui] (http://stackoverflow.com/a/9373195/230513) . – trashgod

3

È possibile utilizzare una trasformazione sul proprio Graphics, che dovrebbe ruotare l'immagine bene. Di seguito è riportato un codice di esempio che è possibile utilizzare per raggiungere questo obiettivo:

AffineTransform affineTransform = new AffineTransform(); 
//rotate the image by 45 degrees 
affineTransform.rotate(Math.toRadians(45), x, y); 
g2d.drawImage(image, m_affineTransform, null); 
25

Il modo più semplice per capovolgere l'immagine è di negativo ridimensionarla. Esempio:

g2.drawImage(image, x + width, y, -width, height, null); 

Che capovolgere orizzontalmente. Ciò capovolgere verticalmente:

g2.drawImage(image, x, y + height, width, -height, null); 
+11

Questo è quasi buono. Dovrebbe essere come g2.drawImage (immagine, x + altezza, y, larghezza, altezza, null); la ragione è perché la scala negativa sposta l'immagine a sinistra, quindi devi compensare questo movimento. –

+1

Sì, +1 @ T.G per bilanciare la negatività. –

+0

Credo che questo sia più efficiente dell'uso di AffineTransform. Qualcuno mi corregge se sbaglio. (+1) – user3437460

0

ruotare l'immagine di 180 gradi verticali

File file = new File(file_Name); 
FileInputStream fis = new FileInputStream(file); 
BufferedImage bufferedImage = ImageIO.read(fis); //reading the image file   
AffineTransform tx = AffineTransform.getScaleInstance(-1, -1); 
tx.translate(-bufferedImage.getWidth(null), -bufferedImage.getHeight(null)); 
AffineTransformOp op = new AffineTransformOp(tx, AffineTransformOp.TYPE_NEAREST_NEIGHBOR); 
bufferedImage = op.filter(bufferedImage, null); 
ImageIO.write(bufferedImage, "jpg", new File(file_Name));