public void paintComponent(Graphics g) { super.paintComponent(g); if (image != null) { Graphics2D g2d = (Graphics2D) g; g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); int x = (getWidth() - image.getWidth(null)) / 2; int y = (getHeight() - image.getHeight(null)) / 2; AffineTransform transform = new AffineTransform(); transform.translate(x, y); if (drawingMode == DrawingMode.LINE) { g2d.setColor(Color.BLUE); g2d.draw(new Line2D.Double(0, getHeight() / 2, getWidth(), getHeight() / 2)); } else if (drawingMode == DrawingMode.RECTANGLE) { g2d.setColor(Color.RED); g2d.draw(new Rectangle2D.Double(0, 0, getWidth() - 1, getHeight() - 1)); } else if (drawingMode == DrawingMode.ELLIPSE) { g2d.setColor(Color.GREEN); g2d.draw(new Ellipse2D.Double(0, 0, getWidth() - 1, getHeight() - 1)); } else if (drawingMode == DrawingMode.POLYGON) { if (polygonPath != null) { g2d.setColor(Color.ORANGE); g2d.draw(polygonPath); } } g2d.drawImage(image, transform, null); } } }
时间: 2024-02-14 21:21:40 浏览: 118
这段代码是 ImagePanel 类的 paintComponent 函数的实现。它继承了 JPanel 的 paintComponent 函数,用于在面板上绘制图形。在绘制之前,先调用了父类的 paintComponent 函数进行清空面板操作。然后根据当前绘制模式,绘制不同的图形。最后,通过 AffineTransform 对象对图形进行变换,将图像居中显示。如果 ImagePanel 对象包含了一个 image 对象,那么在绘制完图形之后,还会将该 image 对象绘制到面板上。
相关问题
java graphics 模糊_使用Graphics2D模糊Java背景
要在Java中模糊背景,可以使用Java 2D API中的`Graphics2D`类。具体步骤如下:
1. 创建一个`BufferedImage`对象,将要绘制的背景图像绘制到该对象上。
2. 使用`java.awt.image.Kernel`类创建一个模糊卷积核,可以通过调整卷积核的大小和值来控制模糊程度。
3. 使用`java.awt.image.ConvolveOp`类创建一个卷积操作对象,并将卷积核作为参数传入。
4. 使用卷积操作对象对`BufferedImage`对象进行滤波操作,得到模糊后的图像。
5. 将模糊后的图像绘制到目标组件的`Graphics`对象上。
下面是一个简单的示例代码,可以将指定的背景图像模糊并绘制到`JPanel`组件上:
```java
import java.awt.*;
import java.awt.image.*;
import javax.swing.*;
public class BlurredBackgroundPanel extends JPanel {
private BufferedImage background;
public BlurredBackgroundPanel(Image background) {
this.background = toBufferedImage(background);
}
private static BufferedImage toBufferedImage(Image img) {
if (img instanceof BufferedImage) {
return (BufferedImage) img;
}
BufferedImage bimage = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = bimage.createGraphics();
g2d.drawImage(img, 0, 0, null);
g2d.dispose();
return bimage;
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g.create();
// 创建模糊卷积核
float[] blurKernel = {
1/9f, 1/9f, 1/9f,
1/9f, 1/9f, 1/9f,
1/9f, 1/9f, 1/9f
};
Kernel kernel = new Kernel(3, 3, blurKernel);
// 创建卷积操作对象
ConvolveOp op = new ConvolveOp(kernel);
// 对背景图像进行滤波操作
BufferedImage blurred = op.filter(background, null);
// 绘制模糊后的背景图像
g2d.drawImage(blurred, 0, 0, getWidth(), getHeight(), null);
g2d.dispose();
}
public static void main(String[] args) {
JFrame frame = new JFrame("Blurred Background Panel");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 300);
// 加载背景图像
Image background = new ImageIcon("background.jpg").getImage();
// 创建模糊背景面板
BlurredBackgroundPanel panel = new BlurredBackgroundPanel(background);
frame.setContentPane(panel);
frame.setVisible(true);
}
}
```
在上面的示例代码中,我们创建了一个名为`BlurredBackgroundPanel`的自定义`JPanel`组件,它可以将指定的背景图像模糊并绘制到自身上。在`paintComponent`方法中,我们创建了一个`Graphics2D`对象,并通过模糊卷积核和卷积操作对象对背景图像进行了滤波操作,得到了模糊后的图像。最后,我们将模糊后的图像绘制到了目标组件的`Graphics`对象上。
需要注意的是,模糊操作是比较耗时的,如果需要实时模糊显示,可能需要使用多线程或GPU加速等技术来提高性能。
java Graphics读取图片并显示
可以使用Java的Graphics2D类来读取和显示图片。下面是一个简单的示例代码:
```java
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class ImagePanel extends JPanel {
private BufferedImage image;
public ImagePanel() {
try {
// 读取图片文件
image = ImageIO.read(new File("image.jpg"));
} catch (IOException ex) {
ex.printStackTrace();
}
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
// 在面板上绘制图片
g2d.drawImage(image, 0, 0, null);
}
public static void main(String[] args) {
JFrame frame = new JFrame("Image Panel");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new ImagePanel());
frame.pack();
frame.setVisible(true);
}
}
```
这个示例代码中,首先在构造函数中读取了一个名为"image.jpg"的图片文件。然后在`paintComponent()`方法中,使用`Graphics2D`类的`drawImage()`方法将图片绘制到面板上。
最后,在`main()`方法中创建了一个`JFrame`窗口,并将`ImagePanel`添加到窗口中。运行程序后,将会显示出该图片。
阅读全文