web-dev-qa-db-fra.com

Flip Image avec Graphics2D

Je cherche depuis un moment à retourner une image, mais je ne l’ai pas encore compris.

J'utilise Graphics2D pour dessiner une Image avec 

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

J'ai juste besoin d'un moyen de retourner l'image sur l'axe horizontal ou vertical.

Si vous voulez, vous pouvez jeter un oeil au full source sur github .

19
Fuze

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

Le le plus simple _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _————————————————————————————————————————————————————————

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

Cela le retournera horizontalement. Cela le retournera verticalement:

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

Vous pouvez utiliser une transformation sur votre Graphics, qui devrait parfaitement faire pivoter l'image. Vous trouverez ci-dessous un exemple de code que vous pouvez utiliser pour cela:

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

Vous devez connaître la largeur et la hauteur de l'image pour vous assurer qu'elle est correctement mise à l'échelle:

int width = image.getWidth(); int height = image.getHeight();

Ensuite, vous devez le dessiner:

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

C'est comme ça que je le fais, de toute façon.

0
Noah the Epic Guy

Faire pivoter l'image à la verticale de 180 degrés

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