java - rotar - Voltear imagen con Graphics2D
rotar imagen java netbeans (5)
He estado tratando de averiguar cómo voltear una imagen por un tiempo, pero no lo he averiguado todavía.
Estoy usando Graphics2D
para dibujar una Image
con
g2d.drawImage(image, x, y, null)
Solo necesito una forma de voltear la imagen en el eje horizontal o vertical.
Si lo desea, puede echar un vistazo a la fuente completa en github .
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);
La forma más fácil de voltear la imagen es escalarla negativamente. Ejemplo:
g2.drawImage(image, x + width, y, -width, height, null);
Eso lo volteará horizontalmente. Esto lo volteará verticalmente:
g2.drawImage(image, x, y + height, width, -height, null);
Necesitas saber el ancho y el alto de la imagen para asegurarte de que esté correctamente escalada:
int width = image.getWidth(); int height = image.getHeight();
Entonces, necesitas dibujarlo:
//Flip the image both horizontally and vertically
g2d.drawImage(image, x+(width/2), y+(height/2), -width, -height, null);
//Flip the image horizontally
g2d.drawImage(image, x+(width/2), y-(height/2), -width, height, null);
//Flip the image vertically
g2d.drawImage(image, x-(width/2), y+(height/2), width, -height, null);
Así es como lo hago, de todos modos.
Puede usar una transformación en sus Graphics
, que debe rotar la imagen 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);
Girar la imagen vertical 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));