画图程序,如何将jpanel的内容存为image
我是java新手,正在用java做一个画图程序。
我用了swing做图形界面,在jpanel里重写了PaintComponent函数来进行绘图。现在正想实现用鼠标作画的功能。
看过其他人的程序源码,有的画图程序是用一个大数组保存了画图时画出来的所有线段、圆等等,然后每次repaint的时候,把数组里所有的东西重新全部绘制一遍。
我发现这个方法有两个问题:
1.每次repaint都要把数组全部重绘一遍,我觉得当内容比较多的时候,这样做很没有效率。
2.当绘制的内容过多,数组填满的时候,就不能再继续画了。
我在这个程序的基础上,打算使用一个缓冲的image来解决以上问题:
每画一会,就将jpanel的内容复制下来,绘制到一个image(或者BufferedImage)上。然后repaint时,先将image上已保存的绘画内容利用drawImage绘制到jpanel上,再进行其他绘制。
但是我卡在了将jpanel的内容生成为image这一步上。我不知道如何完成这一步。
我在网上搜到的方法基本有两个:
1.用Robot的截图功能。这样做速度比较慢,而且很难找到截图区域。
2.将jpanel的画笔交给image,然后怎么在jpanel上画出来的,就怎么在image上重新画一遍。……我就是借用了image才在jpanel上画出完整图像的啊……如果没法把jpanel的图像保存为image,就没办法在jpanel上画了
所以发帖是想请问各位大神,有没有一种办法,可以将JPanel上绘出来的内容保存为Image / BufferedImage?
或者,是否我设计这个程序的思路出现了问题?是否可以有其他的办法来完成这个画图程序的功能?