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

Dev-C++ Discussion :

impression d'ecran en dev c++


Sujet :

Dev-C++

  1. #21
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Par contre autre chose et il possible d'initialiser le positionnement d'une fenetre SDL?parce que as chercher j'ai pas trouver et j'ai meme lu certain post disant que c'etait pas possible! dit qu'ils mentent ces gens la!
    Aucune idée, à vrai dire je n'ai jamais utilisé la SDL.

  2. #22
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2003
    Messages : 65
    Points : 73
    Points
    73
    Par défaut
    Voici une fonction qui capte l'image du presse-papiers et la place dans un fichier .bmp, puis une autre qui place l'image de la fenêtre active (ou l'écran) dans le presse-papiers, puis enfin, un petit programme pour tester le tout. Lancé dans une fenêtre console comme ceci:
    il placera l'image de la fenêtre console dans un fichier .bmp nommé fichier.bmp.

    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
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    #include <stdio.h>
    #include <windows.h>
     
     
    int   ClipboardToBmp(char *nomfich)
    {
    HANDLE              hret;
    HANDLE              hFile;
    char               *p=0;
    long                len_global, debut_pixels;
    BITMAPFILEHEADER    file_header = { 0 };
    BITMAPINFOHEADER   *info;
    int                 longueur_palette=0;
    int                 ret = 0;
    DWORD               bytes_written=0;
     
     
    // Ça prend un nom de fichier
    if (!nomfich)  return (0);
     
    // Ouvrir le clipboard
    if (!OpenClipboard(0))  return (0);
     
    // Récupérer l'image
    hret = GetClipboardData(CF_DIB);
    if (!hret)  {
        CloseClipboard();
        return (0);
    }
     
    // Récupérer l'adresse du bloc mémoire
    p = (char *) GlobalLock(hret);
    if (!p)  {
        CloseClipboard();
        return (0);
    }
     
    // Récupérer la longueur du bloc mémoire
    len_global = GlobalSize(hret);
     
    // La mémoire contient un BITMAPINFOHEADER 
    // suivi de la palette si elle existe
    // et ensuite viennent les bits de l'image.
     
    info = (BITMAPINFOHEADER *) p;
     
    // Calculons la longueur de la palette
    switch (info->biBitCount)  {
           case 1: longueur_palette = 2 * sizeof(RGBQUAD);    break;
           case 4: longueur_palette = 16 * sizeof(RGBQUAD);   break;
           case 8: longueur_palette = 256 * sizeof(RGBQUAD);  break;
           case 16:
           case 32: if (info->biCompression == BI_BITFIELDS)  {
                      // Il y a des masques de bits.
                      // Voir la description de BITMAPINFOHEADER
                      longueur_palette = 3 * sizeof(DWORD);
                    }
                    break; 
    }
     
    // Calculons le début des pixels
    debut_pixels = sizeof(BITMAPFILEHEADER) 
                   + info->biSize 
                   + longueur_palette;
     
    // Plaçons les valeurs dans la structure BITMAPFILEHEADER
    file_header.bfType = 0x4d42;
    file_header.bfSize = sizeof(BITMAPFILEHEADER) + len_global;
    file_header.bfOffBits = debut_pixels;
     
    hFile = CreateFile(nomfich, GENERIC_WRITE, 0, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
    if (hFile)  {
        ret = WriteFile(hFile, (void *) &file_header, sizeof(BITMAPFILEHEADER), &bytes_written, 0);
        ret = WriteFile(hFile, (void *) p, len_global, &bytes_written, 0);
        CloseHandle(hFile);
    }
     
    GlobalUnlock(hret);
    CloseClipboard();
     
    return (ret);
     
    }
     
    /* ---------------------------------------------------------------------- */
    void CaptureEcran(int fenetre_seulement)
    {
     
    keybd_event(VK_SNAPSHOT, fenetre_seulement, 0, 0);
     
    }
     
    /* ---------------------------------------------------------------------- */
    int main(int argc, char *argv[])
    {
     
    if (argc < 2)  {
        printf("Usage: window2bmp nom_de_fichier.bmp\n");
        return (1);
    }
     
    CaptureEcran(1);
     
    Sleep(1000);
     
    if (!ClipboardToBmp(argv[1]))  {
        printf("Une erreur est survenue!\n");
        return (1);
    }
     
    printf("Conversion Ok!\n");
     
    return (0);
     
    }

  3. #23
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2005
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 12
    Points : 1
    Points
    1
    Par défaut
    Merci je prend et je garde en reserve mais pour l'instant ce qu'il y avait au dessus marche largement!

Discussions similaires

  1. effacer le contenu de l'ecran sous dev-c++
    Par reapa dans le forum C
    Réponses: 1
    Dernier message: 13/07/2008, 17h37
  2. Impression ecran d'un formulaire
    Par Décibel dans le forum IHM
    Réponses: 4
    Dernier message: 05/04/2007, 00h12
  3. Réponses: 5
    Dernier message: 27/01/2007, 21h19
  4. Coder une impression d'ecran
    Par hiko-seijuro dans le forum Linux
    Réponses: 11
    Dernier message: 08/07/2005, 09h15

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