it-swarm.com.de

Bild mit Graphics2D kippen

Ich habe versucht, ein Bild für eine Weile zu drehen, habe es aber noch nicht herausgefunden.

Ich benutze Graphics2D, um eine Image mit zu zeichnen 

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

Ich brauche nur eine Möglichkeit, das Bild um die horizontale oder vertikale Achse zu drehen.

Wenn Sie möchten, können Sie die vollständige Quelle auf github anschauen.

19
Fuze

Von 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

Der einfachste Weg, das Bild umzudrehen, ist durch negative Skalierung . Beispiel:

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

Das wird es horizontal wenden. Dadurch wird es vertikal gedreht:

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

Sie können eine Transformation für Ihre Graphics verwenden, die das Bild gut drehen sollte. Nachfolgend finden Sie einen Beispielcode, mit dem Sie Folgendes erreichen können:

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

Sie müssen die Breite und Höhe des Bildes kennen, um sicherzustellen, dass es richtig skaliert ist:

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

Dann müssen Sie es zeichnen:

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

So mache ich es sowieso.

0

Bild vertikal um 180 Grad drehen

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