最近做一个东西需要将JPanel的内容保存下来, 传统的办法是:
BufferedImage image = new BufferedImage(jpanel.getWidth(),jpanel.getHeight(), BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = image.createGraphics();
jpanel.paint(g2); // instead of just paint(g2);
ImageIO.write(image, "jpeg",
new java.io.File("a file.jpg"));
.
不过, 很快我就发现这种方法不适合我.
首先, 我的JPanel的大小为: 6000*6000 ,
这就意味着创建一个BufferedImage需要耗费 60000*3000*4=687M 内存.
单单是创建一个BufferedImage就需要大约700M内存, 这显然不行.
既然整个保存不行, 那就试试先截取JPanel的部分内容再保存.
//....
.....
BufferedImage image = new BufferedImage(1200,60, BufferedImage.TYPE_INT_RGB); //截取大小
Graphics2D g2 = image.createGraphics();
g2.translate(-1200, -60); // 截取起点
jpanel.paint(g2); // instead of just paint(g2);
ImageIO.write(image, "jpeg",
new java.io.File("a file.jpg"));
把上面代码放在一个循环里面, it work.
转载注明:http://c-zhiwu.iteye.com/