una rotar pelota para mover matriz imagenes imagen graficos grados girar figuras clase animaciĆ³n algoritmo java swing image-processing bufferedimage affinetransform

pelota - rotar imagen java netbeans



Girar una imagen en java (3)

¿Ayuda si cambias?

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

a:

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

Estoy buscando rotar una imagen. Tengo un JInternalFrame que contiene un JLabel . La etiqueta contiene la imagen. Después de rotar la imagen, necesito cambiar el tamaño del marco interno. El código que tengo actualmente rota la imagen, pero hay negro alrededor de los bordes de la imagen y está desactivado. Alguna sugerencia en como arreglar esto?

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 }


Necesita usar la trigonometría para determinar el ancho / alto correcto, usando transparencia para evitar el área negra, y creo que la Transformación está mal, lo que la hace descentrada.

Prueba esto:

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(); }

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