2011-07-13 2 views
0

J'ai écrit une application Java qui utilise java.awt.Robot pour effectuer des captures d'écran et me demandais si la capture d'un programme utilisant DirectX/OpenGL serait possible?Capture d'écran des programmes DirectX avec Java

Chaque fois que j'essaie de le faire, je reçois un écran noir

Répondre

0

Oui, c'est possible. Mais peut-être seulement dans des circonstances limitées.

J'ai réussi à capturer le contenu des fenêtres OpenGL (jogl) sur Linux et Windows en utilisant le Robot createScreenCapture.

Quelques informations spécifiques sur la mise en œuvre qui peut être différent pour vous:

  • L'appel à createScreenCapture a été fait à partir de l'application OpenGL .
  • L'application utilisée GLCanvas poids lourds
  • Il utilise Java 6

Assurez-vous que vous passez les coordonnées correctes. Vous pouvez obtenir les coordonnées de l'écran à utiliser à partir du GraphicsEnvironment

0

... Uhh une question difficile; o)

J'ai eu un essai avec d'autres utils capture d'écran et a obtenu un écran noir, aussi. On dirait que DirectX est en passant les graphiques directement à la sortie du moniteur. Je me demande si cela pourrait être accessible dans une application Java.

1

Je ne sais pas si cela est vraiment une solution, mais il semble qu'il ya des moyens plus possible d'obtenir les informations de capture d'écran à l'aide d'un « Framegrabber » ou une classe connexe de JavaCV peut-être: http://code.google.com/p/javacv/ Une partie de la sortie finale affichée à l'écran pourrait être calculé sur une carte graphique qui a des shaders réglés pour agir sur les données d'image avant qu'il ne soit placé dans un tampon d'affichage pour ce qui est montré, il est donc possible que certains effets soient impossibles à capturer sans un loopback analogique. une carte de capture).

poste connexes How to take screenshots fast in Java?

1

OpenGL est une API de dessin, pas au système graphique interface à usage. Il y avait des fois, en prenant des captures d'écran avec OpenGL était en effet possible à travers quelques hacks sales. Cependant récemment j'ai essayé de ré-implémenter ceci sur l'OS moderne pour voir si cela fonctionne toujours, et non, ce n'est plus le cas.

Questions connexes