Tôi có một số vấn đề với việc xoay hình ảnh trong Java bằng cách sử dụng lớp AffineTransform.Các sự cố khi xoay BufferedImage
tôi có phương pháp sau đây để tạo một xoay (90 độ) bản sao của một hình ảnh:
private BufferedImage createRotatedCopy(BufferedImage img, Rotation rotation) {
int w = img.getWidth();
int h = img.getHeight();
BufferedImage rot = new BufferedImage(h, w, BufferedImage.TYPE_INT_RGB);
double theta;
switch (rotation) {
case CLOCKWISE:
theta = Math.PI/2;
break;
case COUNTERCLOCKWISE:
theta = -Math.PI/2;
break;
default:
throw new AssertionError();
}
AffineTransform xform = AffineTransform.getRotateInstance(theta, w/2, h/2);
Graphics2D g = (Graphics2D) rot.createGraphics();
g.drawImage(img, xform, null);
g.dispose();
return rot;
}
Rotation là một enum đơn giản với NONE giá trị, chiều kim đồng hồ và ngược chiều kim đồng.
Các triệu chứng của các vấn đề của tôi được hiển thị ở đây:
http://perp.se/so/rotate_problems.html
Vì vậy, luân chuyển hoạt động OK, nhưng những hình ảnh kết quả không được neo vào các tọa độ chính xác (hoặc làm thế nào ta nên đặt nó). Và kể từ khi tôi không thực sự biết những gì heck tôi đang làm ở nơi đầu tiên (đại số tuyến tính của tôi là yếu), tôi không biết làm thế nào để giải quyết điều này một mình.
Tôi đã thử với một số ngẫu nhiên không quan trọng với phiên bản AffineTransform, nhưng nó đã không giúp tôi (tất nhiên). Tôi đã thử googling (và tìm kiếm SO), nhưng tất cả các ví dụ tôi đã nhìn thấy về cơ bản sử dụng cách tiếp cận tương tự như tôi làm ... mà không làm việc cho tôi.
Cảm ơn lời khuyên.
câu hỏi tương đương cho NET: http://stackoverflow.com/questions/2225363/c-rotate-bitmap-90-degrees – finnw