IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

FAQ DirectX

FAQ DirectXConsultez toutes les FAQ

Nombre d'auteurs : 4, nombre de questions : 63, dernière mise à jour : 14 juin 2021 

 
OuvrirSommaireDirectGraphicsTechniques

Afin de capturer la scène courante avec DirectX, il faut récupérer le contenu du front buffer ou du back buffer, puis enregistrer celui-ci dans un fichier à l'aide des fonctions de D3DX.
Voici une fonction effectuant cette tâche :

 
Sélectionnez
void ScreenShot(const std::string& Filename)
{
    // Surface de destination
    LPDIRECT3DSURFACE9 Surface = NULL;

    // Si on est en mode fenêtré alors on récupère le backbuffer, sinon on prend le frontbuffer (qui permet d'avoir l'anti-aliasing)
    if (Windowed)
    {
        // Récupération du backbuffer
        Device->GetBackBuffer(0, 0, D3DBACKBUFFER_TYPE_MONO, &Surface);

        // Sauvegarde de la surface dans le fichier
        D3DXSaveSurfaceToFile(Filename.c_str(), D3DXIFF_BMP, Surface, NULL, NULL);
    }
    else
    {
        // Récupération des dimensions du bureau (la surface doit impérativement avoir ces dimensions)
        int Width  = GetSystemMetrics(SM_CXSCREEN);
        int Height = GetSystemMetrics(SM_CYSCREEN);

        // Création de la surface de destination (doit impérativement être en D3DFMT_A8R8G8B8)
        Device->CreateOffscreenPlainSurface(Width, Height, D3DFMT_A8R8G8B8, D3DPOOL_SYSTEMMEM, &Surface, NULL);

        // Récupération des données du front buffer
        Device->GetFrontBufferData(NULL, Surface);

        // Sauvegarde de l'image dans un fichier, au format BMP
        D3DXSaveSurfaceToFile(Filename.c_str(), D3DXIFF_BMP, Surface, NULL, NULL);
    }

    // Destruction de la surface
    SAFE_RELEASE(Surface);
}

Ce code est séparé en deux parties : en effet si l'on se trouve en mode plein écran, seule la récupération du front buffer permet d'obtenir l'image finale en cas d'utilisation de l'anti-aliasing. Sinon, le back buffer fait parfaitement l'affaire.

Créé le 22 janvier 2006  par Laurent Gomila

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2005-2012 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.