2013-05-19 2 views
1

Я пишу программу захвата экрана в Linux с помощью Java. Как я могу использовать ImageIO.write() как я использовал его на окнах, как:Linux: как сохранить изображение с помощью ImageIO.write()?

ImageIO.write(screenshot, "png", new File("c:/output.png")); 
+0

'System.exec (« gnome-screenshot »)' – wchargin

+0

какая у вас проблема? – BevynQ

+1

В домашнем каталоге пользователя вы получаете 'System.getProperty (« user.home »);' - http://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html –

ответ

1

Если вы пишете программу захвата экрана программы, то вы, вероятно, захотите использовать FileChooser, чтобы позволить пользователю выбирать, где вывести файл.

Вот простой пример того, как можно реализовать одно:

JFileChooser jfc = new JFileChooser(); 
int returnVal = jfc.showSaveDialog(); 

if(returnVal == JFileChooser.APPROVE_OPTION) { 
    File outputFile = jfc.getSelectedFile(); 
    ImageIO.write(screenshot, "png", outputFile); 
} 

Это также поможет сделать ваш код полностью кросс-платформенный, вместо жесткого кодирования путей для конкретных платформ в программу.

2

В Linux нет «C: \» диск. Вместо этого ваш привод монтируется на точка подключения (обычно /). Вы можете написать свой домашний каталог (эквивалент C:\Users\yourusername\ Win7 в) ни с одним из них:

ImageIO.write(screenshot, "png", new File("/home/yourusername/output.png")); 
ImageIO.write(screenshot, "png", new File("~/output.png")); 

или временную папку (если у вас есть разрешение) с:

ImageIO.write(screenshot, "png", new File("/tmp/output.png")); 

Вы также можете написать текущий каталог с простым:

ImageIO.write(screenshot, "png", new File("output.png")); 

чтобы найти точку монтирования вашего диска, запустите df -h в терминале, чтобы увидеть все подключенные диски.

+0

, но делал то же самое, что и u упоминать но я получаю путь не найденной ошибкой, я дал жесткий путь к коду, тогда также приходит одно и то же исключение, но если я дам рабочий стол, это сэкономит ... какая проблема в моем случае –