欢迎访问宙启技术站
智能推送

Java函数实现图像的旋转和缩放

发布时间:2023-11-27 23:34:17

在Java中,可以使用Java图形库(Graphics)提供的方法来实现图像的旋转和缩放。下面是一个示例代码,演示了如何使用Java Graphics库实现图像的旋转和缩放。

import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

public class ImageRotationAndScaling extends JFrame {

    private JLabel label;
    private JButton rotateButton;
    private JButton scaleButton;

    private BufferedImage originalImage;
    private BufferedImage rotatedImage;
    private BufferedImage scaledImage;

    public ImageRotationAndScaling() {
        setTitle("Image Rotation and Scaling");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(800, 600);

        label = new JLabel();
        add(label, BorderLayout.CENTER);

        rotateButton = new JButton("Rotate");
        rotateButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                rotateImage();
            }
        });
        add(rotateButton, BorderLayout.NORTH);

        scaleButton = new JButton("Scale");
        scaleButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                scaleImage();
            }
        });
        add(scaleButton, BorderLayout.SOUTH);

        // 加载原始图像
        try {
            originalImage = ImageIO.read(new File("path_to_image_file.jpg"));
        } catch (IOException e) {
            e.printStackTrace();
        }

        // 显示原始图像
        if (originalImage != null) {
            label.setIcon(new ImageIcon(originalImage));
        }
    }

    // 旋转图像
    private void rotateImage() {
        if (originalImage != null) {
            // 创建一个新的缓冲图像,大小与原始图像相同
            rotatedImage = new BufferedImage(originalImage.getWidth(), originalImage.getHeight(), BufferedImage.TYPE_INT_ARGB);

            // 创建AffineTransform类,用于旋转图像
            AffineTransform at = new AffineTransform();
            at.rotate(Math.toRadians(45), originalImage.getWidth()/2, originalImage.getHeight()/2);

            // 使用AffineTransform类对原始图像进行旋转
            Graphics2D g2d = (Graphics2D) rotatedImage.getGraphics();
            g2d.setTransform(at);
            g2d.drawImage(originalImage, 0, 0, this);
            g2d.dispose();

            // 显示旋转后的图像
            label.setIcon(new ImageIcon(rotatedImage));
        }
    }

    // 缩放图像
    private void scaleImage() {
        if (originalImage != null) {
            // 创建一个新的缓冲图像,大小为原始图像的1/2
            scaledImage = new BufferedImage(originalImage.getWidth()/2, originalImage.getHeight()/2, BufferedImage.TYPE_INT_ARGB);

            // 使用Graphics类的drawImage方法缩放原始图像
            Graphics2D g2d = (Graphics2D) scaledImage.getGraphics();
            g2d.drawImage(originalImage, 0, 0, originalImage.getWidth()/2, originalImage.getHeight()/2, this);
            g2d.dispose();

            // 显示缩放后的图像
            label.setIcon(new ImageIcon(scaledImage));
        }
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new ImageRotationAndScaling().setVisible(true);
            }
        });
    }
}

上述代码实现了一个简单的图形界面程序,其中包含了一个标签和两个按钮。按钮分别用于旋转图像和缩放图像。首先加载原始图像,然后通过按钮点击事件触发旋转和缩放操作。

为了实现旋转功能,我们使用AffineTransform类来创建一个图形变换对象,并使用rotate方法来指定旋转角度和旋转中心点。然后通过Graphics2D类的drawImage方法将原始图像绘制到旋转后的图像上。

为了实现缩放功能,我们使用Graphics类的drawImage方法,并指定缩放后的图像大小来实现。