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);
        }
    }
}

 

posted @ 2025-04-14 22:01  atom_lxh  阅读(7)  评论(0)    收藏  举报