Ich bin auf der Suche nach einem Bild zu drehen. Ich habe eine JInternalFrame
, die eine JLabel
enthält. Das Etikett enthält das Bild. Nachdem das Bild gedreht wurde, muss die Größe des internen Rahmens geändert werden. Der Code, den ich gerade habe, dreht das Bild, aber es ist schwarz um die Ränder des Bildes und es ist außermittig. Irgendwelche Vorschläge, wie Sie das beheben können?Drehen Sie ein Bild in Java
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
}
Im Allgemeinen ändert sich ein Bild Drehen der Breite und der Höhe (bezogen auf X und Y-Achse). Ich schätze, das trägt dazu bei, dass es "dezentriert" ist. Ich musste das lösen, indem ich die neue Größe berechnete und dafür verantwortlich zeichnete. Was die schwarzen Ränder betrifft, ist dies ein ziemlich häufiger Fall, in dem die Drehfunktion nicht mit einem Alphakanal arbeitet. Vielleicht hilft das für die Positionierung: http://stackoverflow.com/questions/2056338/calculating-the-center-of-rotation-after-translation – Jere
Siehe auch http://stackoverflow.com/questions/3420651 – trashgod