截取JPanel的部分内容并保存为图片

最近做一个东西需要将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/

 

你可能感兴趣的:(C++,c,C#)