Java: Rotating Images

Devo essere in grado di ruotare le immagini individualmente (in java). L’unica cosa che ho trovato finora è g2d.drawImage (image, affinetransform, ImageObserver). Sfortunatamente, ho bisogno di disegnare l’immagine in un punto specifico, e non c’è alcun metodo con un argomento che 1.rotini l’immagine separatamente e 2. mi permetta di impostare xey. ogni aiuto è apprezzato

Questo è come puoi farlo. Questo codice presuppone l’esistenza di un’immagine bufferata chiamata ‘immagine’ (come dice il tuo commento)

// The required drawing location int drawLocationX = 300; int drawLocationY = 300; // Rotation information double rotationRequired = Math.toRadians (45); double locationX = image.getWidth() / 2; double locationY = image.getHeight() / 2; AffineTransform tx = AffineTransform.getRotateInstance(rotationRequired, locationX, locationY); AffineTransformOp op = new AffineTransformOp(tx, AffineTransformOp.TYPE_BILINEAR); // Drawing the rotated image at the required drawing locations g2d.drawImage(op.filter(image, null), drawLocationX, drawLocationY, null); 

AffineTransform istanze di AffineTransform possono essere concatenate (sumte). Quindi puoi avere una trasformazione che combina lo “spostamento all’origine”, la “rotazione” e lo “spostamento indietro nella posizione desiderata”.

Un modo semplice per farlo senza l’uso di una dichiarazione di sorteggio così complicata:

  //Make a backup so that we can reset our graphics object after using it. AffineTransform backup = g2d.getTransform(); //rx is the x coordinate for rotation, ry is the y coordinate for rotation, and angle //is the angle to rotate the image. If you want to rotate around the center of an image, //use the image's center x and y coordinates for rx and ry. AffineTransform a = AffineTransform.getRotateInstance(angle, rx, ry); //Set our Graphics2D object to the transform g2d.setTransform(a); //Draw our image like normal g2d.drawImage(image, x, y, null); //Reset our graphics object so we can draw with it again. g2d.setTransform(backup); 
 public static BufferedImage rotateCw( BufferedImage img ) { int width = img.getWidth(); int height = img.getHeight(); BufferedImage newImage = new BufferedImage( height, width, img.getType() ); for( int i=0 ; i < width ; i++ ) for( int j=0 ; j < height ; j++ ) newImage.setRGB( height-1-j, i, img.getRGB(i,j) ); return newImage; } 

da https://coderanch.com/t/485958/java/Rotating-buffered-image