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