Je veux écrire un programme de capture d'écran pour la plate-forme Windows, mais je ne sais pas comment capturer l'écran. La seule méthode que je connaisse est d'utiliser GDI, mais je suis curieux de savoir s'il existe d'autres façons de procéder et, s'il y en a, laquelle entraîne le moins de frais généraux? La vitesse est une priorité.
Le programme de screencasting sera pour enregistrer des séquences de jeu, bien que, si cela restreint les options, je suis toujours ouvert à toute autre suggestion qui ne relève pas de cette portée. La connaissance n'est pas mauvaise, après tout.
Edit : Je suis tombé sur cet article: Diverses méthodes pour capturer l'écran . Il m'a présenté la manière de procéder de l'API Windows Media et la manière de procéder par DirectX. Il mentionne dans la conclusion que la désactivation de l'accélération matérielle pourrait considérablement améliorer les performances de l'application de capture. Je suis curieux de savoir pourquoi. Quelqu'un pourrait-il remplir les espaces manquants pour moi?
Edit : J'ai lu que les programmes de screencasting tels que Camtasia utilisent leur propre pilote de capture. Quelqu'un pourrait-il m'expliquer en profondeur comment cela fonctionne et pourquoi c'est plus rapide? J'ai peut-être également besoin de conseils sur la mise en œuvre de quelque chose comme ça, mais je suis sûr qu'il existe de toute façon une documentation existante.
De plus, je sais maintenant comment FRAPS enregistre l'écran. Il accroche l'API graphique sous-jacente pour lire à partir du tampon arrière. D'après ce que je comprends, c'est plus rapide que la lecture à partir du tampon avant, car vous lisez à partir de la RAM système plutôt que de la RAM vidéo. Vous pouvez lire l'article ici .
MovePlayerLeft()
. Et vous enregistrez également l'heure et la durée des pressions sur les touches et autres entrées. Ensuite, lorsque vous êtes en mode lecture, vous ignorez simplement l'entrée et lisez à la place les données enregistrées. Si, dans les données, vous voyez une touche gauche, vous appelez MovePlayerLeft()
.