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 :

taille & résolution screenshot


Sujet :

Windows

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    151
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 151
    Par défaut taille & résolution screenshot
    Bonjour à toutes et à tous

    Je souhaite faire une capture d'écran en choisissant la résolution de l'image créée

    mon ecran ayant une résolution de 1280*1024 j'ai voulu avoir une image de 380*256

    le code est le suivant

    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
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    #include <windows.h>
    
    //-----------------------------------------------------------------------------
    // scr2jpg
    //-----------------------------------------------------------------------------
    BOOL scr2bmp(LPCTSTR pszFileName)
    {
      HDC              hdcMem;
      HDC              hdcScr;
      HBITMAP          hbmMem;
      HBITMAP          hbmOld;  
      HANDLE           hFile;
      BITMAPINFO       bmi;
      BITMAPFILEHEADER bfh;  
      BITMAPINFOHEADER bmih;
      LPBYTE           pPixels;
      DWORD            dwTmp;
      UINT             nScrX = GetSystemMetrics(SM_CXSCREEN);
      UINT             nScrY = GetSystemMetrics(SM_CYSCREEN);  
      
      hdcScr = GetDC(NULL);
      hbmMem = CreateCompatibleBitmap(hdcScr, nScrX, nScrY);
      hdcMem = CreateCompatibleDC(hdcScr);
      hbmOld = (HBITMAP) SelectObject(hdcMem, hbmMem);
      
      if(!BitBlt(hdcMem, 0, 0, nScrX, nScrY, hdcScr, 0, 0, SRCCOPY))
        goto Erreur;
    /*         
      if(!StretchBlt(hdcMem, 0, 0, 512, 384, hdcScr, 0, 0, nScrX, nScrY, SRCCOPY)) 
        goto Erreur;      
    */         
      bmih.biSize          = sizeof(BITMAPINFOHEADER);
      bmih.biWidth         = nScrX;  // 512;
      bmih.biHeight        = nScrY;  // 384;
      bmih.biBitCount      = GetDeviceCaps(hdcMem, BITSPIXEL);
      bmih.biCompression   = BI_RGB;
      bmih.biPlanes        = 1;  
      bmih.biSizeImage     = 0;
      bmih.biXPelsPerMeter = 0;
      bmih.biYPelsPerMeter = 0;
      bmih.biClrUsed       = 0;
      bmih.biClrImportant  = 0;
      
      bmi.bmiHeader        = bmih;
    
      if(!(pPixels = (LPBYTE) GlobalAlloc(GMEM_FIXED, bmih.biWidth * bmih.biHeight * (bmih.biBitCount / 8))))
        goto Erreur;                                  
                                     
      if(!GetDIBits(hdcMem, hbmMem, 0, (WORD) bmih.biHeight, pPixels, &bmi, DIB_RGB_COLORS))
        goto Erreur;                 
      
      bfh.bfType      = 0x4d42;
      bfh.bfReserved1 = 0;
      bfh.bfReserved2 = 0; 
      bfh.bfOffBits   = (DWORD) sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);   
      bfh.bfSize      = (DWORD) sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + 
                                bmih.biWidth * bmih.biHeight * (bmih.biBitCount / 8);
                                
      hFile = CreateFile(pszFileName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
    
      if(hFile == INVALID_HANDLE_VALUE) 
        goto Erreur;                            
      
      if(!WriteFile(hFile, (LPVOID) &bfh, sizeof(BITMAPFILEHEADER), (LPDWORD) &dwTmp, NULL))
        goto Erreur;
        
      if(!WriteFile(hFile, (LPVOID) &bmih, sizeof(BITMAPINFOHEADER), (LPDWORD) &dwTmp, NULL))
        goto Erreur;
        
      if(!WriteFile(hFile, (LPVOID) pPixels, bmih.biWidth * bmih.biHeight * (bmih.biBitCount / 8), (LPDWORD) &dwTmp, NULL))
        goto Erreur;
    
      GlobalFree(pPixels);  
      CloseHandle(hFile);
      SelectObject(hdcMem, hbmOld);
      ReleaseDC(NULL, hdcScr);
      DeleteDC(hdcMem);
      return TRUE;
      
    Erreur:
      if(pPixels) 
        GlobalFree(pPixels);  
      if(hFile)
      { 
        CloseHandle(hFile);
        DeleteFile(pszFileName);
      }    
      SelectObject(hdcMem, hbmOld);
      ReleaseDC(NULL, hdcScr);
      DeleteDC(hdcMem); 
      return FALSE; 
    }
    
    //=============================================================================
    // winmain
    //=============================================================================
    int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrev, PSTR lpszArg, int iCmdShow)
    {
      return (int) scr2bmp("screen.bmp");
    }
    Merci d'avance pour votre aide et vos conseils

    ++

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 398
    Par défaut
    Je pense qu'il y aura un StretchBlt(), mais pour l'instant ton code est trop compact.
    Tu devrais le séparer en plusieurs fonctions: Une pour capturer l'écran, une pour enregistrer, et une pour faire le traitement intermédiaire (ici, le redimensionnement)...
    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.

Discussions similaires

  1. [CSS]Résolution et taille ajustée ?
    Par elitost dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 05/05/2006, 17h02
  2. taille des frame suivant résolution de l'écran
    Par chti_juanito dans le forum Interfaces Graphiques en Java
    Réponses: 6
    Dernier message: 25/04/2006, 15h17
  3. Réponses: 1
    Dernier message: 18/03/2006, 18h12
  4. [Dreamweaver MX] 2 pb : résolution et taille des pages HTML
    Par Mout85 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 01/09/2005, 20h15
  5. screenshot dans une résolution > a celle affichée
    Par cemoi dans le forum DirectX
    Réponses: 8
    Dernier message: 29/12/2003, 18h16

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