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

C++ Discussion :

Stocker une image Bitmap dans un tableau


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 3
    Par défaut Stocker une image Bitmap dans un tableau
    Bonjour,
    je suis débutant en c++ et programme avec visual C++ 6.0 sous WinXP.J'essaie en vain depuis 2 semaines de stocker une image Bitmap(8 bit avec niveau de gris) dans un tableau à deux dimensions.Pour ce faire je n'utilise pas de MFC mais plutôt Win32 API.Quelq'un pourrait-il me donner des astuces par rapport à mon code car j'ai des erreurs dans mon code au niveau de :
    BYTE tempScanLine[WIDTH * 1] :
    error C2057: should be a constant expression
    expression
    error C2466 : can't reserved an array of size 0
    error C2133: 'tempScanLine' : unknown parameter
    erreur au niveau de:
    const double grayscale[WIDTH*HEIGHT];
    error C2133: 'grayscale' : unknown parameter
    J'ai regardé dans MSDN la signification de ces erreurs et ne parvient toujours pas à les corriger.Voici mon code:

    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
    #include <windows.h>
    #include <stdio.h>
     
    LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
     
    int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                        PSTR szCmdLine, int iCmdShow)
    {
         static CHAR szAppName[] ="Salut" ;
         HWND         hwnd;
         MSG          msg ;
         WNDCLASS     wndclass ;
     
     
    	 wndclass.style         = NULL;
         wndclass.lpfnWndProc   = WndProc ;
         wndclass.cbClsExtra    = 0 ;
         wndclass.cbWndExtra    = 0 ;
         wndclass.hInstance     = hInstance ;
         wndclass.hIcon         = LoadIcon (NULL, IDI_APPLICATION) ;
         wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
         wndclass.hbrBackground = (HBRUSH) GetStockObject (BLACK_BRUSH) ;
         wndclass.lpszMenuName  = NULL ;
         wndclass.lpszClassName = szAppName ;
     
         if (!RegisterClass (&wndclass))
         {
              MessageBox (NULL, TEXT ("Problème!"),szAppName, MB_ICONERROR) ;
              return 0 ;
         }
         hwnd = CreateWindow (szAppName,                  // nom de la classe
                              "Cube",		  // titre de la fenêtre
                               WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU
    									| WS_MINIMIZEBOX | WS_VISIBLE    ,   // style de la fenêtre
                              CW_USEDEFAULT,              // position initiale en x
                              CW_USEDEFAULT,              // position initiale en y
                              350,						  // largeur initiale
                              350,						  // hauteur initiale
                              NULL,                       // handle de la fenêtre mère
                              NULL,                       // handle du menu de la fenêtre
                              hInstance,                  // handle de l'instance
                              NULL) ;                     // paramètres de création
     
     
     
         ShowWindow (hwnd, iCmdShow) ;
     
         UpdateWindow (hwnd);
     
         while (GetMessage (&msg, NULL, 0, 0))
         {
              TranslateMessage (&msg) ;
              DispatchMessage (&msg) ;
         }
         return msg.wParam ;
    }
     
    LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {	
    static HBITMAP hbitmap;
    int WIDTH, HEIGHT;
    switch (message)
         {
       case WM_PAINT:
     
    HANDLE hObj = LoadImage(NULL,"cube.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
    HDC hdc = CreateCompatibleDC(NULL);
    SelectObject(hdc, hObj);
    BITMAPINFO bInfo;
    bInfo.bmiHeader.biSize = sizeof(bInfo.bmiHeader);
    bInfo.bmiHeader.biWidth = WIDTH;
    bInfo.bmiHeader.biHeight = HEIGHT;
    bInfo.bmiHeader.biPlanes = 1;
    bInfo.bmiHeader.biBitCount = 8; 
    bInfo.bmiHeader.biCompression = BI_RGB;
    BYTE tempScanLine[WIDTH ];
    BYTE info[HEIGHT][WIDTH];
     
    ZeroMemory(&bInfo, sizeof(BITMAPINFO));
    bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
    int count = HEIGHT - 1;
    const double grayscale[WIDTH*HEIGHT];
    for(int j = 0; j < HEIGHT; ++j)
    {
          // find the width of the object
          GetDIBits(hdc, (HBITMAP) hObj, j, 1, NULL, &bi, DIB_RGB_COLORS);
     
          // store the color values in a 3D array of bytes
          GetDIBits(hdc, (HBITMAP) hObj, j, 1, tempScanLine, &bInfo, DIB_RGB_COLORS);
          for(int z = 0; z < bi.bmiHeader.biWidth; ++z)
          {
                info[count][z][0] = tempScanLine[(z * 1) + 2];    
                info[count][z][1] = tempScanLine[(z * 1) + 1];     
                info[count][z][2] = tempScanLine[(z * 1) + 0];                   
              //Transform to gray values
                grayscale[z]=info[count][z][0]*0.299 + info[count][z][1]*0.587+info[count][z][2]*0.114;
          }
         --count;
    }
    break;
         case WM_DESTROY:
         DeleteObject(hbitmap);	
          PostQuitMessage (0) ;
             return 0 ;
    	  }
        return DefWindowProc (hwnd, message, wParam, lParam);
    }
    j'aimerai retourner le tableau grayscale et ne sais pas comment faire à ce niveau....ou peut être dois je calculer le tableau grayscale dans la fonction
    WinMain?
    Merci

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Une petite convention, on ne met pas les noms des variables en majuscules (int WIDTH, HEIGHT). La majuscules, c'est fait pour les constantes et les typedef. C'est une convention donc ce n'est pas obligatoire.

    Ceci dit:
    BYTE tempScanLine[WIDTH * 1] n'est pas autorisé car la dimension doit être une constante (un nombre) connue et évaluée par le compilateur. Dans ton cas, elle est connue uniquement à l'exécution.

    Pour faire ce que tu veux faire, c'est de l'allocation dynamique de mémoire (malloc en C ou new en C++)

    Pour grayscale[WIDTH*HEIGHT], c'est pareil
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

Discussions similaires

  1. Réponses: 33
    Dernier message: 30/01/2011, 19h17
  2. Utilisation d'une image bitmap dans une DLL
    Par colorid dans le forum Débuter
    Réponses: 5
    Dernier message: 27/02/2009, 15h41
  3. Ouvrir une image Bitmap dans un SpeedBouton
    Par soror dans le forum Delphi
    Réponses: 12
    Dernier message: 25/07/2007, 15h18
  4. Afficher une image stockée dans un tableau de bytes
    Par ValyGator dans le forum Windows
    Réponses: 2
    Dernier message: 07/01/2007, 22h52
  5. Réponses: 6
    Dernier message: 22/12/2004, 11h00

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