2012-03-04 8 views
16

He estado tratando de descubrir cómo voltear una imagen por un tiempo, pero aún no me he dado cuenta.Voltear imagen con Graphics2D

estoy usando Graphics2D para dibujar una imagen con

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

Sólo necesito una manera de girar la imagen en el eje horizontal o vertical.

Si lo desea, puede echar un vistazo a la fuente completa en GitHub (link)

EDIT: Woops, me refiero a poner 'flip' en el título, no 'rotación'.

+3

En lugar de tener un vistazo a toda su fuente, hacer una [SSCCE] (http://sscce.org) . – Jeffrey

+1

Si googlea "imagen rotada Graphics2D" encontrará muchos tutoriales – DNA

Respuesta

48

De 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 para '-1' :-) Se menciona un ejemplo relacionado [aquí] (http://stackoverflow.com/a/9373195/230513) . – trashgod

3

Puede usar una transformación en su Graphics, que debería girar la imagen muy bien. A continuación se muestra un código de ejemplo que puede utilizar para lograr esto:

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

La manera más fácil para voltear la imagen es negativa por su reducción. Ejemplo:

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

Eso le dará la vuelta horizontalmente. Esto le dará la vuelta verticalmente:

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

Esto es casi bueno. Debe ser como g2.drawImage (imagen, x + altura, y, ancho, -hecho, nulo); La razón para esto es porque la escala negativa moverá la imagen a la izquierda, por lo que debe compensar este movimiento. –

+1

Sí +1 @ T.G para equilibrar la negatividad. –

+0

Creo que esto es más eficiente que usar AffineTransform. Alguien me corrige si estoy equivocado. (+1) – user3437460

0

Girar imagen vertical de 180 grados

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