java 缩放图片后点击获取相对坐标
一、NewImagePanel.java
import javax.swing.*; import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.image.BufferedImage; import java.io.File; import java.util.ArrayList; import javax.imageio.ImageIO; import java.awt.Point; import java.util.ArrayList; import java.util.List; @SuppressWarnings("serial") public class NewImagePanel extends JPanel { private BufferedImage image; private int panelWidth, panelHeight; List<Point> points = new ArrayList<>(); public NewImagePanel(String imagePath, int panelWidth, int panelHeight) { this.panelWidth = panelWidth; this.panelHeight = panelHeight; try { image = ImageIO.read(new File(imagePath)); } catch (Exception e) { e.printStackTrace(); } addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { if (e != null) { double scaleX = (double) panelWidth / image.getWidth(); double scaleY = (double) panelHeight / image.getHeight(); int originalX = (int) (e.getX() / scaleX); int originalY = (int) (e.getY() / scaleY); System.out.println("Original Clicked at: " + new Point(originalX, originalY)); points.add(new Point(originalX, originalY)); // 打印所有点 for (Point p : points) { System.out.println("(" + p.x + ", " + p.y + ")"); } } } }); } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); if (image != null) { Image scaledImage = image.getScaledInstance(panelWidth, panelHeight, Image.SCALE_SMOOTH); g.drawImage(scaledImage, 0, 0, this); } } }
二、MainFrame.java
import javax.swing.*; import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.image.BufferedImage; import java.io.File; import java.util.ArrayList; import javax.imageio.ImageIO; import java.awt.Point; import java.util.ArrayList; import java.util.List; @SuppressWarnings("serial") public class NewImagePanel extends JPanel { private BufferedImage image; private int panelWidth, panelHeight; List<Point> points = new ArrayList<>(); public NewImagePanel(String imagePath, int panelWidth, int panelHeight) { this.panelWidth = panelWidth; this.panelHeight = panelHeight; try { image = ImageIO.read(new File(imagePath)); } catch (Exception e) { e.printStackTrace(); } addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { if (e != null) { double scaleX = (double) panelWidth / image.getWidth(); double scaleY = (double) panelHeight / image.getHeight(); int originalX = (int) (e.getX() / scaleX); int originalY = (int) (e.getY() / scaleY); System.out.println("Original Clicked at: " + new Point(originalX, originalY)); points.add(new Point(originalX, originalY)); // 打印所有点 for (Point p : points) { System.out.println("(" + p.x + ", " + p.y + ")"); } } } }); } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); if (image != null) { Image scaledImage = image.getScaledInstance(panelWidth, panelHeight, Image.SCALE_SMOOTH); g.drawImage(scaledImage, 0, 0, this); } } }