Tôi đang tìm cách xoay hình ảnh. Tôi có số JInternalFrame
có chứa JLabel
. Nhãn chứa hình ảnh. Sau khi hình ảnh đã được xoay, tôi cần phải thay đổi kích thước khung bên trong. Mã tôi hiện đang xoay hình ảnh, nhưng có màu đen xung quanh các cạnh của hình ảnh và nó được căn giữa. Bất kỳ đề xuất về làm thế nào để sửa lỗi này?Xoay hình ảnh trong 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
}
Nói chung, xoay một hình ảnh thay đổi chiều rộng và chiều cao (so với trục X và Y). Tôi đoán điều này đang góp phần làm cho nó bị "làm trung tâm". Tôi đã phải giải quyết điều này bằng cách tính toán kích thước mới và tính toán nó. Đối với các cạnh màu đen, đây là trường hợp khá phổ biến trong đó chức năng xoay không hoạt động với kênh alpha. Có lẽ điều này sẽ giúp cho việc định vị: http://stackoverflow.com/questions/2056338/calculating-the-center-of-rotation-after-translation – Jere
Xem thêm http://stackoverflow.com/questions/3420651 – trashgod