📜  颤动图像 - Java (1)

📅  最后修改于: 2023-12-03 15:12:53.469000             🧑  作者: Mango

颤动图像 - Java

在Java中,颤动图像可以通过使用Graphics2D对象的rotate()和translate()方法进行实现。这些方法会让图像绕着某个点旋转,同时也可以进行平移操作。

实现步骤

以下是一个简单的实现步骤:

  1. 创建一个JPanel对象,用于显示我们的颤动图像。
  2. 加载需要显示的图像资源。
  3. 编写绘制图像的方法,通常是在JPanel的paintComponent()方法中实现。
  4. 创建一个Timer对象,用于定时调用绘制方法。
  5. 在定时器触发的回调方法中,调用Graphics2D对象的rotate()和translate()方法对图像进行颤动处理。
  6. 调用JPanel的repaint()方法,刷新显示。
代码实现
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import javax.swing.*;

public class ShakyImagePanel extends JPanel implements ActionListener {
    private ImageIcon imageIcon;
    private Timer timer;
    private int x, y;
    private int angle;

    public ShakyImagePanel(String imgPath) {
        imageIcon = new ImageIcon(imgPath);
        x = y = 0;
        angle = 0;
        timer = new Timer(100, this);
        timer.start();
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D)g.create();
        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        AffineTransform at = new AffineTransform();
        at.translate(x, y);
        at.rotate(Math.toRadians(angle), imageIcon.getIconWidth() / 2, imageIcon.getIconHeight() / 2);
        g2d.drawImage(imageIcon.getImage(), at, null);
        g2d.dispose();
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        angle += 30;
        x = (int)(Math.random() * 10 - 5);
        y = (int)(Math.random() * 10 - 5);
        repaint();
    }

    public static void main(String[] args) {
        JFrame frame = new JFrame("Shaky Image Example");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(300, 300);
        ShakyImagePanel panel = new ShakyImagePanel("image.jpg");
        frame.setContentPane(panel);
        frame.setVisible(true);
    }
}
解析
  1. 在构造函数中加载所需的图像资源,并初始化颤动参数和定时器。
  2. 在paintComponent()方法中创建Graphics2D对象,并设置抗锯齿属性和变换矩阵。
  3. 在定时器回调方法中更新颤动参数,并调用repaint()方法刷新显示。
  4. 在main()方法中创建JFrame对象,并将ShakyImagePanel作为content pane添加到JFrame中。
效果展示

下面是一个从网络获取的图片在颤抖效果下的展示效果:

shaky-image-java