Tôi cần tính vị trí mới của chế độ xem khi phóng to hình ảnh.JScrollPane - Thu phóng tương đối so với vị trí chuột
Giao diện được xây dựng như sau:
- ImagePanel vẽ hình ảnh
- ImagePanelWrapper là một gói JPanel quanh imagePanel
- JScrollPane chứa ImagePanelWrapper
Khi phóng to hoặc , hệ số zoom của ImagePanel được thay đổi và kích thước ưa thích của ImagePanel đang được tính toán lại. Do đó hình ảnh trên bảng điều khiển này di chuyển, mặc dù ImagePanel vẫn ở cùng một điểm nhìn.
Các phương pháp sau đây được gọi khi người dùng giữ phím CTRL và sử dụng bánh xe chuột. Điểm cho trước là vị trí con trỏ được cung cấp bởi MouseWheelListener. Với chức năng trong các phương pháp này, hình ảnh đã ở cùng vị trí trên cùng bên trái khi phóng to hoặc thu nhỏ.
Vấn đề là tôi không thể tìm ra cách di chuyển tương đối so với chuột, chẳng hạn như Paint.NET chẳng hạn. Bất kỳ ý tưởng?
/**
*
*/
public void zoomOut(Point point) {
this.imagePanel.setZoom(this.imagePanel.getZoom() * 0.9f);
Point pos = this.getViewport().getViewPosition();
int newX = (int) (pos.x * 0.9f);
int newY = (int) (pos.y * 0.9f);
this.getViewport().setViewPosition(new Point(newX, newY));
this.imagePanel.revalidate();
this.imagePanel.repaint();
}
/**
*
*/
public void zoomIn(Point point) {
this.imagePanel.setZoom(this.imagePanel.getZoom() * 1.1f);
Point pos = this.getViewport().getViewPosition();
int newX = (int) (pos.x * 1.1f);
int newY = (int) (pos.y * 1.1f);
this.getViewport().setViewPosition(new Point(newX, newY));
this.imagePanel.revalidate();
this.imagePanel.repaint();
}
+1 Awesome, answer. Tốt nhất tôi đã thấy trong một thời gian. – max
bạn sir xứng đáng cảm ơn bạn :) – EyeSpy
Tôi có một câu hỏi tương tự. Tôi đang cố gắng sử dụng AffineTransform để làm điều tương tự, và tôi đang gặp một số rắc rối khi áp dụng toán học từ câu hỏi này. Nếu bạn tìm thấy thời gian, bạn có thể giúp tôi không? http://stackoverflow.com/questions/37509908/zoom-in-at-mouse-cursor – bigblind