在写projet时,软件有一个功能是截取屏幕之后,可以将截取的图片保存成jpg或pdf格式。
java有自带的截屏函数:import java.awt.Robot;在Robot库里有个createScreenCapture(),它接受一个Rectangle对象作为参数,Rectangle对象的四个参数分别是截取的屏幕的左上角x,y坐标值,截取的矩形的宽和高。主要代码如下:
Robot robot = new Robot();
try {
BufferedImage img = robot.createScreenCapture(new Rectangle(startX,
startY, w, h)); //screen capture, screenshot
ImageIO.write(img, "JPG","文件保存路径");//第三个参数是File类型
} catch (IllegalArgumentException e) {
e.printStackTrace();
}
保存文件用到文件选择对话框JFileChooser,几个主要的方法:
- setDialogType(): 设置对话框类型,参数可选择JFileChooser.OPEN_DIALOG或者JFileChooser.SAVE_DIALOG
- showSaveDialog():显示对话框类型为“保存”
- getSelectedFile():得到用户要保存的文件路径,这里有用户输入的文件名,返回值是File类型
用户输入的文件名有可能是包含后缀的,也有可能不要包含,或者后缀名是错的,程序需要判断并且保证后缀名有且正确。用下面这个函数可以判断。这个方法是我在《算法》书上看到的,做了相应的修改以适应我的projet。
//判断用户输入的文件名是否是要保存的类型
public static boolean judgeExtensionName(String fileName, String fileType){
int dot = fileName.indexOf(".");
String extensionName = fileName.substring(dot+1, fileName.length());//得到后缀
if (extensionName.toLowerCase().equals(fileType)) {
return true;
}else{
return false;
}
}
然后在下面的代码里调用这个函数,将截取的图片保存成jpg格式。
public static void saveFileAsJPG(){
JFileChooser fc = new JFileChooser();
fc.setDialogTitle("Save Files");
fc.setDialogType(JFileChooser.SAVE_DIALOG);
FileNameExtensionFilter filterImage = new FileNameExtensionFilter(
"JPG", ".jpg");
fc.addChoosableFileFilter(filterImage);
int result = fc.showSaveDialog(null);
if (result == JFileChooser.APPROVE_OPTION) {
File saveFile = fc.getSelectedFile();//get file's name entered by user
if(!judgeExtensionName(saveFile.toString(), "jpg")){
saveFile = new File(saveFile.toString() + ".jpg");
}
try {
ScreenCapture.draggedScreen(saveFile);//截屏并保存图片的函数
} catch (Exception ex) {
ex.printStackTrace();
}
}
}