Ruota un’immagine in java

Sto cercando di ruotare un’immagine. Ho un JInternalFrame che contiene una JLabel . L’etichetta contiene l’immagine. Dopo che l’immagine è stata ruotata, ho bisogno di ridimensionare la cornice interna. Il codice che ho attualmente ruota l’immagine, ma c’è del nero attorno ai bordi dell’immagine ed è decentrato. Qualche suggerimento su come risolvere questo problema?

 public void rotateIcon(int angle) { int w = theLabel.getIcon().getIconWidth(); int h = theLabel.getIcon().getIconHeight(); int type = BufferedImage.TYPE_INT_RGB; // other options, see api BufferedImage DaImage = new BufferedImage(h, w, type); Graphics2D g2 = DaImage.createGraphics(); double x = (h - w)/2.0; double y = (w - h)/2.0; AffineTransform at = AffineTransform.getTranslateInstance(x, y); at.rotate(Math.toRadians(angle), w/2.0, h/2.0); g2.drawImage(new ImageIcon(getData()).getImage(), at, theLabel); g2.dispose(); theLabel.setIcon(new ImageIcon(DaImage)); this.setSize(DaImage.getWidth(),DaImage.getHeight()); //resize the frame } 

Devi usare la trigonometria per determinare la larghezza / altezza corretta, usando la trasparenza per prevenire l’area nera, e penso che la trasformazione sia sbagliata, il che la rende fuori centro.

Prova questo:

 public static BufferedImage rotate(BufferedImage image, double angle) { double sin = Math.abs(Math.sin(angle)), cos = Math.abs(Math.cos(angle)); int w = image.getWidth(), h = image.getHeight(); int neww = (int)Math.floor(w*cos+h*sin), newh = (int) Math.floor(h * cos + w * sin); GraphicsConfiguration gc = getDefaultConfiguration(); BufferedImage result = gc.createCompatibleImage(neww, newh, Transparency.TRANSLUCENT); Graphics2D g = result.createGraphics(); g.translate((neww - w) / 2, (newh - h) / 2); g.rotate(angle, w / 2, h / 2); g.drawRenderedImage(image, null); g.dispose(); return result; } private static GraphicsConfiguration getDefaultConfiguration() { GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); GraphicsDevice gd = ge.getDefaultScreenDevice(); return gd.getDefaultConfiguration(); } 

da http://flyingdogz.wordpress.com/2008/02/11/image-rotate-in-java-2-easier-to-use/

Potresti provare a usare un’icona ruotata .

Aiuta se cambi:

BufferedImage DaImage = new BufferedImage(height, width, type);

a:

BufferedImage DaImage = new BufferedImage(**width, height**, type); ?