那里。我正在使用 Java 构建一个需要经常重新绘制的桌面程序。就像下面这样:
class myWindow extends JWindow {
Image[] layers = new Image[8] // Some png Image object filled here
@Override
public void paint(Graphics g) {
int i;
super.paint();
for (i=0;i<=7;i++)
g.paintImage(layers[i], /*other param*/);
}
}
正如我们所看到的,绘制需要时间,因此我想为某些层
构建一个缓冲区。它应该是一个图像或图形对象。
但后来我发现我无法采取任何方法来合并图像
(只需将它们一个放在另一个上)。
所以我的问题是:如何构建如上所述的缓冲区,或者如果我使用 paintImage()
来绘制替代的Graphics
, 如何使用此图形
来绘制我的窗口
感谢大家。
最佳答案
这是合并图像数组的一种方法。
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import javax.swing.JPanel;
class MyPanel extends JPanel {
BufferedImage image;
public MyPanel(Image[] layers) {
this.image = createBufferedImage(layers);
}
protected BufferedImage createBufferedImage(Image[] layers) {
Dimension maxSize = new Dimension();
for (int i = 0; i < layers.length; i++) {
Dimension d = new Dimension(layers[i].getWidth(this),
layers[i].getHeight(this));
maxSize = max(maxSize, d);
}
image = new BufferedImage(maxSize.width, maxSize.height,
BufferedImage.TYPE_INT_ARGB);
Graphics g = image.getGraphics();
g.setColor(Color.WHITE);
g.fillRect(0, 0, image.getWidth(), image.getHeight());
for (int i = 0; i < layers.length; i++) {
g.drawImage(layers[i], 0, 0, this);
}
g.dispose();
return image;
}
protected Dimension max(Dimension a, Dimension b) {
Dimension d = new Dimension();
d.width = Math.max(a.width, b.width);
d.height = Math.max(a.height, b.height);
return d;
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(image, 0, 0, this);
}
}
关于java - 如何在java中构建缓冲区来合并图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12353271/