📜  java 图像绘制 - Java (1)

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

Java 图像绘制

Java 是一种强大的编程语言,它提供了许多用于图像绘制的API。本文将介绍Java中的图像绘制功能,包括绘制基本形状、绘制文本、绘制图片以及创建动画等。让我们开始吧!

绘制基本形状

Java提供了许多用于绘制基本形状的类,如矩形、圆形、线条和弧形等。以下是绘制一个矩形的示例代码:

import java.awt.EventQueue;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class DrawRectangle extends JPanel {
    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawRect(10, 10, 100, 100);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(() -> {
            JFrame frame = new JFrame("Draw rectangle");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.add(new DrawRectangle());
            frame.setSize(250, 200);
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
        });
    }
}

该代码使用JPanel类来绘制一个矩形,并使用JFrame类在屏幕上显示它。注意,我们重写了paintComponent()方法来执行实际的绘制操作。

绘制文本

Java还提供了用于绘制文本的API。以下是绘制文本的示例代码:

import java.awt.EventQueue;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class DrawText extends JPanel {
    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawString("Hello, World!", 50, 50);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(() -> {
            JFrame frame = new JFrame("Draw text");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.add(new DrawText());
            frame.setSize(250, 200);
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
        });
    }
}

该代码使用drawString()方法来绘制一个文本字符串,并使用JFrame类在屏幕上显示它。

绘制图片

Java还提供了API来加载和绘制图片。以下是绘制图片的示例代码:

import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Image;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class DrawImage extends JPanel {
    Image image;

    public DrawImage() {
        try {
            image = ImageIO.read(getClass().getResource("myimage.jpg"));
        } catch (Exception e) {
            // Exception handling
        }
    }

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawImage(image, 10, 10, null);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(() -> {
            JFrame frame = new JFrame("Draw image");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.add(new DrawImage());
            frame.setSize(250, 200);
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
        });
    }
}

该代码使用ImageIO类从磁盘上的文件中加载了一张图片,并使用drawImage()方法将其绘制到屏幕上。

创建动画

Java也可以用来创建动画,其中一个基本的方式是,在一段时间内多次绘制相同的场景,但每次绘制时改变一些属性(例如坐标、大小或颜色等),从而产生动画的效果。以下是创建动画的示例代码:

import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class AnimatingShapes extends JPanel implements Runnable {
    Thread animation;
    int x, y;
    boolean running;

    public AnimatingShapes() {
        x = 10;
        y = 10;
        running = true;
        animation = new Thread(this);
        animation.start();
    }

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.setColor(Color.RED);
        g.fillOval(x, y, 50, 50);
    }

    @Override
    public void run() {
        while (running) {
            x++;
            y++;
            repaint();
            try {
                Thread.sleep(50);
            } catch (InterruptedException e) {
                // Exception handling
            }
        }
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(() -> {
            JFrame frame = new JFrame("Animating shapes");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.add(new AnimatingShapes());
            frame.setSize(250, 200);
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
        });
    }
}

该代码使用了Thread类来创建一个用于动画的线程,并使用paintComponent()方法绘制一个圆形。 在run()方法中,每次迭代将圆形的坐标增加1,并使用repaint()方法告诉Java重新绘制该组件。由于该线程在50ms内迭代一次,因此该程序将产生流畅的动画效果。

以上就是Java图像绘制的介绍,希望对您有所帮助!