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 :

Imprime ecran d'un dessin


Sujet :

Windows

  1. #1
    Nouveau membre du Club
    Inscrit en
    Septembre 2007
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2007
    Messages : 183
    Points : 38
    Points
    38
    Par défaut Imprime ecran d'un dessin
    Bonjour,

    Il me semble avoir lu quelque part que faire un imprime ecram automatique et gerer un enregistrement de bmp serait possible... mais impossible de remettre la main sur cette source. Ais je revé?

    Donc en gros voila ce que je voudrais faire:

    Mon programme crée un graphique dans une boite de dialogue.
    J'aimerais avoir un imprime ecran de cette boite de dialogue, enregistré au format bmp automatiquement...

    Qqn aurait il une idée?

    Merci d'avance!!

    Anna

  2. #2
    Débutant  
    Avatar de koKoTis
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 438
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 438
    Points : 2 415
    Points
    2 415
    Par défaut
    Tu peut utiliser la touche Imprim écran, puis coller l'image dans paint.

    Si non tu peut utiliser ce programme: http://el.juky.free.fr/HTML/index2.p...tion=captecran

  3. #3
    Nouveau membre du Club
    Inscrit en
    Septembre 2007
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2007
    Messages : 183
    Points : 38
    Points
    38
    Par défaut
    Euh ben appuyer sur la touche c'est justement ce que je voudrais éviter que mon utilisateur fasse.... donc bon...

    Et il me faudrait enregistrer les images en BMP dans une fenetre precise, dans un dossier precis...

    Donc je ne peux pas utiliser ton programme, mais si tu m'explique je suis toute ouie

  4. #4
    Débutant  
    Avatar de koKoTis
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 438
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 438
    Points : 2 415
    Points
    2 415
    Par défaut
    C'est simple, avec la programme, tu peut:
    1) capturer l'écran entier ou juste une fenêtre
    2) définir le répertoire ou sera enregistrer la capture
    3) chosir le format bmp

    C'est ce que tu veut non ?

  5. #5
    Nouveau membre du Club
    Inscrit en
    Septembre 2007
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2007
    Messages : 183
    Points : 38
    Points
    38
    Par défaut
    oui MAIS .... je ne peux pas utiliser TON programme... il faut que je redefinisse tout ca car je vais devoir inclure mon programme sur pas mal de machines, et telecharger ton programme et l'utiliser ne me sera pas autorisé...

    moyen que tu m'explique comment je peux inclure les fonctions dans mon programme ou pas?

  6. #6
    Débutant  
    Avatar de koKoTis
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 438
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 438
    Points : 2 415
    Points
    2 415
    Par défaut
    Ah, tu veut créer un programme toi même ?

    La je ne peut pas t'aider

  7. #7
    Nouveau membre du Club
    Inscrit en
    Septembre 2007
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2007
    Messages : 183
    Points : 38
    Points
    38
    Par défaut
    bah j'ai deja un programme en cours dans lequel a la fin d'une analyse je crée un histogramme.. que je veux sauvegarder sous format bmp...

    C'est pas toi qui a ecrit le prog?

  8. #8
    Débutant  
    Avatar de koKoTis
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 438
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 438
    Points : 2 415
    Points
    2 415
    Par défaut
    Citation Envoyé par nanettemontp Voir le message
    C'est pas toi qui a ecrit le prog?

    Ben non, je ne saurait pas comment faire moi

  9. #9
    Nouveau membre du Club
    Inscrit en
    Septembre 2007
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2007
    Messages : 183
    Points : 38
    Points
    38
    Par défaut
    ah zut...

    bon ben si qqn a une idee... si il le fait c'est que c'est faisable

  10. #10
    Membre habitué
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 109
    Points : 168
    Points
    168
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    BOOL ScreenshotToBmp(HWND hWnd, LPCTSTR szFilename, BOOL bFlag)
    {
      BOOL             bRet = FALSE;
      HDC              hMemDC, hDC;
      DWORD            dwWrite;  
      HANDLE           hFile;
      void            *pBits;  
      WORD             wBpp;
      HBITMAP          hBmp;   
      BITMAPFILEHEADER bfh;
      BITMAPINFO       bi;
      RECT             r;
    
      if(bFlag) // Screenshot de la fenetre entiere
      {  
        hDC = GetWindowDC(hWnd);
        GetWindowRect(hWnd, &r);
      }
      else     // Screenshot de la zone cliente uniquement
      {  
        hDC = GetDC(hWnd);
        GetClientRect(hWnd, &r);
      }  
      r.bottom -= r.top;
      r.right  -= r.left;
      hMemDC = CreateCompatibleDC(hDC);
      wBpp   = GetDeviceCaps(hDC, BITSPIXEL); 
        
      bi.bmiHeader.biSize          = sizeof(BITMAPINFOHEADER);
      bi.bmiHeader.biWidth         = r.right;
      bi.bmiHeader.biHeight        = r.bottom;
      bi.bmiHeader.biPlanes        = 1;
      bi.bmiHeader.biBitCount      = wBpp; 
      bi.bmiHeader.biCompression   = BI_RGB;
      bi.bmiHeader.biSizeImage     = bi.bmiHeader.biXPelsPerMeter = 0;
      bi.bmiHeader.biYPelsPerMeter = bi.bmiHeader.biClrUsed = bi.bmiHeader.biClrImportant = 0; 
      
      if((hBmp = CreateDIBSection(hDC, &bi, DIB_PAL_COLORS, &pBits, 0, 0)))
      {
        SelectObject(hMemDC, hBmp);
        if(BitBlt(hMemDC, 0, 0, r.right, r.bottom, hDC, 0, 0, SRCCOPY))
        {
          bfh.bfType = 0x4D42;
          bfh.bfSize = ((r.right * r.bottom * wBpp) >> 3) + sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
          bfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
          bfh.bfReserved1 = bfh.bfReserved2 = 0;
          hFile = CreateFile(szFilename, GENERIC_WRITE, 0, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
          if(hFile != INVALID_HANDLE_VALUE)
          {
            WriteFile(hFile, &bfh, sizeof(BITMAPFILEHEADER), &dwWrite, 0);
            WriteFile(hFile, &bi.bmiHeader, sizeof(BITMAPINFOHEADER), &dwWrite, 0);
            WriteFile(hFile, pBits, (r.right * r.bottom * wBpp) >> 3, &dwWrite, 0);
            CloseHandle(hFile);
            bRet = TRUE;
          }
        }
        DeleteObject(hBmp);
      }
      ReleaseDC(hWnd, hDC);
      DeleteDC(hMemDC);
      return bRet;
    }
    
    ...
    // Fenetre entiere
    ScreenshotToBmp(hWnd, "screenshot.bmp", 1); 
    ...
    // Zone cliente
    ScreenshotToBmp(hDlg, "screenshot.bmp", 0);   
    ...

  11. #11
    Débutant  
    Avatar de koKoTis
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 438
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 438
    Points : 2 415
    Points
    2 415
    Par défaut
    C'est quel language ca ?

  12. #12
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Je dirais du C...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  13. #13
    Nouveau membre du Club
    Inscrit en
    Septembre 2007
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2007
    Messages : 183
    Points : 38
    Points
    38
    Par défaut
    oui on dirait du C... je vais essayer ca... je vous tiens au courant..

  14. #14
    Nouveau membre du Club
    Inscrit en
    Septembre 2007
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2007
    Messages : 183
    Points : 38
    Points
    38
    Par défaut
    Bonben ca marche du feu de dieu.., c'est génial... et en plus je crois que je l'ai inséré corretement dans mon code.... que demande le peuple...

    MERCIIIIIIIIIIIIIIIIIIIIII

  15. #15
    Nouveau membre du Club
    Inscrit en
    Septembre 2007
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2007
    Messages : 183
    Points : 38
    Points
    38
    Par défaut
    Erf.... probleme ...

    une machine sur laquelle je suis doit etre en mode 256 couleurs pour qu'un programme tres souvent utilisé fonctionne...

    du coup l'imprime-écran ne fonctionne pas... (enregistrement d'une image noire de la taille de ma fenetre) qqn peut il m'expliquer comment remédier a mon probleme?

    Merci par avance,

    Anna

  16. #16
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    L'idée de base: Regarde si une fonction échoue, et quelle erreur elle renvoie.

    PS: Tu oublies de mémoriser l'ancien bitmap du DC et de le restaurer avant de détruire le DC...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  17. #17
    Nouveau membre du Club
    Inscrit en
    Septembre 2007
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2007
    Messages : 183
    Points : 38
    Points
    38
    Par défaut
    Citation Envoyé par Médinoc Voir le message

    PS: Tu oublies de mémoriser l'ancien bitmap du DC et de le restaurer avant de détruire le DC...
    Euh.... ce qui veut dire?

  18. #18
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Les DCs s'utilisent comme ça:
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    HDC hdcMem = CreateCompatibleDC(...);
    HBITMAP hBmp = CreateDIBSection(...);
    {
    	HGDIOBJ hOldBmp = SelectObject(hdcMem, hBmp);
     
    	// Jouer avec le bitmap dans son DC
    	// ...
     
    	SelectObject(hdcMem, hOldBmp);
    }
    DeleteObject(hBmp);
    DeleteDC(hdc);
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  19. #19
    Nouveau membre du Club
    Inscrit en
    Septembre 2007
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2007
    Messages : 183
    Points : 38
    Points
    38
    Par défaut
    ok merci je vais voir ca

  20. #20
    Nouveau membre du Club
    Inscrit en
    Septembre 2007
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2007
    Messages : 183
    Points : 38
    Points
    38
    Par défaut
    tu veux dire que son code devrait plutot etre comme ca?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    BOOL ScreenshotToBmp(HWND hWnd, LPCTSTR szFilename, BOOL bFlag)
    {
      BOOL             bRet2 = FALSE;
      HDC              hMemDC, hDC;
      DWORD            dwWrite;  
      HANDLE           hFile;
      void            *pBits;  
      WORD             wBpp;
      HBITMAP          hBmp;   
      BITMAPFILEHEADER bfh;
      BITMAPINFO       bi;
      RECT             r;
    
      if(bFlag) // Screenshot de la fenetre entiere
      {  
        hDC = GetWindowDC(hWnd);
        GetWindowRect(hWnd, &r);
      }
      else     // Screenshot de la zone cliente uniquement
      {  
        hDC = GetDC(hWnd);
        GetClientRect(hWnd, &r);
      }  
      r.bottom -= r.top;
      r.right  -= r.left;
      hMemDC = CreateCompatibleDC(hDC);
      wBpp   = GetDeviceCaps(hDC, BITSPIXEL); 
        
      bi.bmiHeader.biSize          = sizeof(BITMAPINFOHEADER);
      bi.bmiHeader.biWidth         = r.right;
      bi.bmiHeader.biHeight        = r.bottom;
      bi.bmiHeader.biPlanes        = 1;
      bi.bmiHeader.biBitCount      = wBpp; 
      bi.bmiHeader.biCompression   = BI_RGB;
      bi.bmiHeader.biSizeImage     = bi.bmiHeader.biXPelsPerMeter = 0;
      bi.bmiHeader.biYPelsPerMeter = bi.bmiHeader.biClrUsed =
    bi.bmiHeader.biClrImportant = 0; 
      
      if((hBmp = CreateDIBSection(hDC, &bi, DIB_PAL_COLORS, &pBits, 0, 0)))
      {
        HGDIOBJ hOldBmp = SelectObject(hMemDC, hBmp);
        SelectObject(hMemDC, hBmp);    
        if(BitBlt(hMemDC, 0, 0, r.right, r.bottom, hDC, 0, 0, SRCCOPY))
        {
          bfh.bfType = 0x4D42;
          bfh.bfSize = ((r.right * r.bottom * wBpp) >> 3) +
    sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
          bfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
          bfh.bfReserved1 = bfh.bfReserved2 = 0;
          hFile = CreateFile(szFilename, GENERIC_WRITE, 0, 0, CREATE_ALWAYS,
    FILE_ATTRIBUTE_NORMAL, 0);
          if(hFile != INVALID_HANDLE_VALUE)
          {
            WriteFile(hFile, &bfh, sizeof(BITMAPFILEHEADER), &dwWrite, 0);
            WriteFile(hFile, &bi.bmiHeader, sizeof(BITMAPINFOHEADER), &dwWrite,
    0);
            WriteFile(hFile, pBits, (r.right * r.bottom * wBpp) >> 3, &dwWrite,
    0);
            CloseHandle(hFile);
            bRet2 = TRUE;
          }SelectObject(hMemDC, hOldBmp);
    
        }
        DeleteObject(hBmp);
      }
      ReleaseDC(hWnd, hDC);
      DeleteDC(hMemDC);
      return bRet2;
    }

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [VB6] Empecher la Fonction Imprime Ecran
    Par zako dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 08/06/2006, 11h51
  2. Imprimer ecran sur mandrake10
    Par mjihanne dans le forum Administration système
    Réponses: 2
    Dernier message: 25/05/2006, 19h31
  3. Automatisation Imprime Ecran et envoie sous Excel
    Par lito74 dans le forum Access
    Réponses: 7
    Dernier message: 03/01/2006, 13h51
  4. Stocker un imprim ecran sous bmp avec l'api windows
    Par Tofalu dans le forum Windows
    Réponses: 7
    Dernier message: 04/05/2005, 11h32
  5. Capture image par imprime ecran
    Par tomnie dans le forum Applications et environnements graphiques
    Réponses: 9
    Dernier message: 14/04/2004, 09h02

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