Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

Capture écran comme le fait 'Print Screen'


Sujet :

C++Builder

  1. #1
    Membre éclairé
    Capture écran comme le fait 'Print Screen'
    Je cherche à pouvoir sauver la totalité de l'affichage de l'écran et en faire une image Bmp.
    Ceci est un peut l'équivalent de la touche 'Print-Screen' qui met dans le presse papier l'image qui peut alors être reprise dans word , photoshop, ...

    Quelqu'un aurait-il une idée de marche à suivre sous borland C++ 6.0 avec un OS window XP sp 2 & 3?

    merci!

  2. #2
    Membre actif
    salut, réponse dans la faq


    Il faut récupérer le DC (Device Context) de l'écran grâce à la fonction GetWindowsDC. Cette fonction prend pour argument le Handle de la fenêtre dont on veut le DC. Ici, nous souhaitons celui de tout l'écran. Le Handle de l'écran (Bureau) est 0.
    D'où le code suivant :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
     
    HDC ScreenSrc = GetWindowDC(0);

    La méthode BitBlt va copier le contenu de ce DC vers le Canvas de notre composant TBitmap (DC de notre image) :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    BitBlt(bitmap->Canvas->Handle, // Destination
          0, // Coin haut-gauche : abscisse
          0, // Coin haut-gauche : ordonnée
          Screen->Width, // Largeur de la zone destination
          Screen->Height, // Hauteur de la zone destination
          ScreenSrc, // Source
          0, // Haut-gauche de la source : abscisse
          0, // Haut-gauche de la source : ordonnée
          SRCCOPY);       // Méthode de copie

    Enfin, pour libérer le DC de l'écran (bureau), utilisez la méthode ReleaseDC :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
     
    ReleaseDC(GetDesktopWindow(), ScreenSrc);

    Si vous souhaitez directement enregistrer votre capture d'écran, voici un exemple de code :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Graphics::TBitmap *Bitmap = new Graphics::TBitmap;
    Bitmap->Height = Screen->Height;
    Bitmap->Width = Screen->Width;
    HDC ScreenSrc = GetWindowDC(0);
    BitBlt(Bitmap->Canvas->Handle, 0, 0, Screen->Width,
           Screen->Height, ScreenSrc, 0, 0, SRCCOPY);
    Bitmap->SaveToFile(ExtractFilePath(Application->ExeName)+"Bitmap.bmp");
    ReleaseDC(GetDesktopWindow(), ScreenSrc);
    delete Bitmap;

    On crée ici directement un Bitmap et on lui affecte la copie d'écran, puis on utilise la méthode SaveToFile du Bitmap pour sauvegarder l'image dans le répertoire courant.
    « Aucun homme ne peut rien vous révéler sinon ce qui repose déjà à demi endormi dans l'aube de votre connaissance»

    « No man can reveal to you aught but that which already lies half asleep in the dawning of your knowledge »_(¯`·.__-Alg3ri4nH4ck3r-__.·´¯)_

  3. #3
    Membre éclairé
    !!! M E R C I !!!