2009-03-14 6 views
11

J'ai besoin de saisir une série de captures d'écran et de les concaténer dans un film. J'essaie d'utiliser la classe Java Robot pour capturer l'écran.Performances createScreenCapture du robot Java

Mais la méthode createScreenCapture() prend plus d'une seconde sur ma machine. Je ne peux même pas avoir 1 fps. Y a-t-il un moyen de l'accélérer? Ou y a-t-il une autre API?

Modifier: Il alloue une image mise en mémoire tampon.

BufferedImage image = robot.createScreenCapture (écran); // Enregistrer la capture d'écran en tant que jpg
Fichier fichier = nouveau Fichier ("images/screen" + index + ".jpg");
ImageIO.write (image, "jpg", fichier); indice ++;

L'écriture dans le fichier jpg prend environ 200 ms alors que l'obtention de BufferedImage prend environ 1400ms.

Répondre

2

Je suggère d'aller avec C ou C++ pour cela, il a beaucoup plus d'accès direct au matériel.

Si vous souhaitez obtenir les performances maximales absolues, accédez au niveau du pilote et supprimez simplement les données de la carte vidéo. Il est difficile de trouver un pilote comme celui-ci, car il pourrait être utilisé pour vaincre facilement toute protection contre la copie, car il saisit les données à l'écran.

Mais si vous avez besoin de Java et de Robot, êtes-vous sûr que ce n'est qu'un appel de fonction qui prend tant de temps? Il n'attribue pas une BufferedImage ou quelque chose d'autre?

+0

Oui 'createScreenCapture()' alloue un 'BufferedImage', et convertit tous les pixels au format' INT_RGBA', ce qui prend le plus de temps. – finnw

1

Essayez d'expérimenter différents paramètres d'écran. La profondeur de couleur l'affectera car AWT doit tout convertir en un format raster commun.

Quelques exemples timings de mon PC:

Resolution | Depth | Time taken 
------------+-------+------------ 
1280x1024 | 32 | 215ms 
1280x1024 | 16 | 155ms 
1600x900 | 32 | 235ms 

Mon adaptateur ne peut pas faire 24bpp ou 64bpp donc je ne pouvais pas tester avec ces profondeurs, mais je suppose qu'ils nécessiteraient plus de cycles CPU pour convertir.

Questions connexes