IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

Windows Discussion :

Capture de l'écran


Sujet :

Windows

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 33
    Par défaut Capture de l'écran
    Bonjour,

    Je voudrai créer une bmp et l'enregistrer dans un fichier à partir de la fonction PrintWindow ou autre qui permet de capturer l'écran.
    Je ne sais pas trop bien comment je dois faire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    HDC hdcScreen=GetDC(NULL);
    HDC hdcCompatible = CreateCompatibleDC(hdcScreen);
    HBITMAP hbmScreen = CreateCompatibleBitmap(hdcScreen, 1280, 1024);
    
    SelectObject(hdcCompatible, hbmScreen);
    
    BitBlt(hdcCompatible, 0, 0, 1280, 1024, hdcScreen, 0,0, SRCCOPY);

    J'aimerai au final pouvoir enregistrer l'image dans un fichier.

    Merci d'avance.

  2. #2
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 539
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 539
    Par défaut
    MSDN->
    Capturing an Image
    http://msdn.microsoft.com/en-us/libr...14(VS.85).aspx


    Storing an Image
    http://msdn.microsoft.com/en-us/libr...40(VS.85).aspx

    Tu peux passer sinon par l'interface COM IPicture ou bien des libs comme CxImage

    Sinon si tu as VC2008 tu peux passer par gdiplus ce qui sera plus simple peut-être

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 33
    Par défaut
    Merci Mat.M pour ta réponse.

    Je vais revoir encore 1 fois dans la doc.
    Mais par contre, j'ai une autre question si il n'y a t-il pas moyen de lire les pixels de l'écran sans en créer une image et que ça soit optimisé?

    Merci d'avance.

  4. #4
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 539
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 539
    Par défaut
    Citation Envoyé par greg1517 Voir le message
    Merci Mat.M pour ta réponse.

    Je vais revoir encore 1 fois dans la doc.
    Mais par contre, j'ai une autre question si il n'y a t-il pas moyen de lire les pixels de l'écran sans en créer une image et que ça soit optimisé?

    Merci d'avance.

    Oui avec GetDIBBits() Voir le MSDN

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 33
    Par défaut
    Bonjour,

    Ca ne marche toujours pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        HDC hdcScreen2=CreateCompatibleDC(hdcScreen);
        HBITMAP hbmScreen = CreateCompatibleBitmap(hdcScreen,
                         GetDeviceCaps(hdcScreen, HORZRES),
                         GetDeviceCaps(hdcScreen, VERTRES));
        SelectObject(hdcScreen2, hbmScreen);
        BITMAPINFO structure;
        GetDIBits(hdcScreen2, hbmScreen, 0, 1280*1024, &buff, &structure, DIB_RGB_COLORS);
    GetDIBIts renvoit 0.

    Merci d'avance.

  6. #6
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 539
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 539
    Par défaut
    euuhh pourquoi 1280*1024 et codé en dur ?
    c'est normal la structure de type BITMAPINFO n'est pas initialisée.
    REgarde bien l'exemple du MSDN
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if (!GetDIBits(hDC, hBMP, 0, (WORD) pbih->biHeight, lpBits, pbi, 
            DIB_RGB_COLORS))

Discussions similaires

  1. Capture de l'écran du client
    Par kawthar dans le forum ASP.NET
    Réponses: 0
    Dernier message: 16/09/2010, 11h57
  2. Débutant: capturer une zone écran numérique
    Par alphanet dans le forum VB 6 et antérieur
    Réponses: 21
    Dernier message: 15/12/2007, 01h00
  3. Réponses: 4
    Dernier message: 30/05/2005, 10h29
  4. [C#] Capture écran dans pictureBox
    Par Gauden dans le forum Windows Forms
    Réponses: 5
    Dernier message: 05/05/2004, 10h18
  5. Réponses: 10
    Dernier message: 10/10/2003, 14h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo