Снимок экрана с помощью Java-апплета с использованием класса Java Robot не работает - PullRequest
2 голосов
/ 06 июля 2011

Я использую Java-апплет, чтобы сделать снимок экрана веб-браузера, используя Java-класс Robot.

Robot objRobot = new Robot ();
BufferedImage objBufferedImage = objRobot.createScreenCapture(objRectArea); 

Это хорошо работает в системе Windows, снимая скриншот.Но в случае Mac OS XI получаю пустое изображение.

Когда я проверяю средство просмотра событий, я вижу следующую ошибку:

invalid context
invalid pixel format
CoreAnimation: rendering error 506

Проблема возникает для всех браузеров Safari,Firefox и Chrome.Мой апплет является подписанным апплетом.

В чем может быть причина?

Моя конфигурация машины выглядит следующим образом:

OS : MAC OS X
Version : 10.6.4

Ответы [ 2 ]

1 голос
/ 06 июля 2011

Я отправил сообщение об ошибке invalid pixel format в Google и получил длинный список результатов (около 10.000) - похоже, проблема не в Java, а в проблеме конфигурации вашего Mac.

Попробуйте изменить разрешение экрана и перезапустить апплет. Хороший шанс, что ошибка связана с некоторыми разрешениями экрана (внешний дисплей?). Некоторые предложения в Интернете заключались в том, чтобы полностью обновить ваш OSX.

0 голосов
/ 18 декабря 2011
dir Robot objRobot = null;
                 try
                 {
                    objRobot = new Robot();
                 } catch(Exception ex)
                 {

         }

Dimension screenDim =  Toolkit.getDefaultToolkit().getScreenSize(); 

BufferedImage objBufferedImage =  objRobot.createScreenCapture(new Rectangle(0, 0, (int)screenDim.getWidth(), (int)screenDim.getHeight()));

int areaToExportWidth = 1024;
int areaToExportHeight = 768;

//Create the image 
BufferedImage exportImage =objRobot.createScreenCapture(new Rectangle(0, 0, (int)screenDim.getWidth(), (int)screenDim.getHeight()));

//Get graphics - Get the layer we can actually draw on
Graphics2D imageGraphics = (Graphics2D) exportImage.getGraphics();



//Cleanup after ourselves
imageGraphics.dispose();

//Setup to write the BufferedImage to a file
String pathToFile = "dir";
File outputDirectory = new File(pathToFile);
File outputFile = new File(pathToFile+"\\"+counter+"MyImage.png");
//Here we make sure the directory exists.
/*
 * Returns TRUE if:
 *  The directory is MISSING
 *  and/or the directory IS NOT a directory
 */
if(!outputDirectory.exists() || !outputDirectory.isDirectory()){
    outputDirectory.mkdirs(); //Make the directory
} // Else do nothing

//Write the file
try { //Attempt the write
    ImageIO.write(exportImage, "png", outputFile);
} catch (IOException e) { //For some reason it failed so...
    e.printStackTrace(); //... why did it fail?
}
...