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 :

Problème avec GetPixel


Sujet :

Windows

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2005
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 44
    Points : 35
    Points
    35
    Par défaut Problème avec GetPixel
    Salut à tous.

    Je voudrais récuperer la couleur d'un pixel d'une image chargée en mémoire, mais pas affichée a l'écran. Voila mon bout de 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
    /* en variable globale
    HDC hdc_mask;
    HBITMAP hmpb_mask = (HBITMAP)LoadImage(NULL,".\\Images\\mask.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
    */
    case WM_LBUTTONDOWN:
                 x = LOWORD(lParam);
                 y = HIWORD(lParam);
                 hdc_mask = CreateCompatibleDC(NULL);
                 SelectObject(hdc_mask, hbmp_mask);
                 color = GetPixel(hdc_mask, x, y);
                 if(color == RGB(255, 0, 0))
                 {
                     MessageBox(hwnd, "ça marche", "truc de bidul", 0);
                    
                 }
                 break;
    Evidement ça ne marche pas.
    Autre chose: j'ai bien une partie de mon image qui est rouge 'RGB(255, 0, 0)', et quand je clique dessus il ne se passe rien.

    Merci beaucoup de votre aide.

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    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 379
    Points : 41 573
    Points
    41 573
    Par défaut
    1. Tu as essayé de faire tourner cela dans le debugger ?
    2. Tu le détruits quelque part, ton DC temporaire dont on ne sait pas ce qu'il fait en global ?

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mars 2005
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 44
    Points : 35
    Points
    35
    Par défaut
    voila le code complet de la fonction WindowWrocedure

    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
    LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
        int x,y;
        HDC hdc;
        PAINTSTRUCT ps;
        COLORREF color;
        HDC hdc_mask;
        
        switch (message)
        {
            case WM_CREATE:
                 hbmp_mask = (HBITMAP)LoadImage(NULL,".\\Images\\mask.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
                 hbmp_background = (HBITMAP)LoadImage(NULL,".\\Images\\background.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
                 hdc_mask = CreateCompatibleDC(NULL);
                 break;
            case WM_PAINT:
                 hdc = BeginPaint(hwnd, &ps);
                 PrintBmp(hdc, hbmp_background);  //affiche l'image passer en paramètre
                 EndPaint(hwnd, &ps);
                 break;
            case WM_DESTROY:
                 DeleteObject(hbmp_mask);
                 DeleteObject(hbmp_background);
                 ReleaseDC(hwnd, hdc_mask);
                 ReleaseDC(hwnd, hdc);
                 PostQuitMessage (0);
                 break;
            case WM_LBUTTONDOWN:
                 x = LOWORD(lParam);
                 y = HIWORD(lParam);
                 SelectObject(hdc_mask, hbmp_mask);
                 color = GetPixel(hdc_mask, x, y);
                 if(color == RGB(255, 0, 0))
                 {
                     MessageBox(hwnd, "ça marche", "", 0);
                 }
                 break;
            default:
                return DefWindowProc (hwnd, message, wParam, lParam);
        }
    
        return 0;
    }

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    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 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Erreur: tu as inversé le problème: hdc_mask n'est plus persistant, et tu l'emploies comme s'il l'était...

  5. #5
    Nouveau membre du Club
    Inscrit en
    Mars 2005
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 44
    Points : 35
    Points
    35
    Par défaut
    Erreur: tu as inversé le problème: hdc_mask n'est plus persistant, et tu l'emploies comme s'il l'était...
    Je ne comprend pas ce que tu veut dire 'hdc_mask n'est plus persistant'

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    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 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Tu as fait de hdc_mask une variable locale non-statique. Donc, elle n'est plus persistante.
    Ce qui aurait été très bien pour un temporaire.

    Le problème, c'est qu'en même temps, tu as cessé d'utiliser hdc_mask comme un temporaire, puisque maintenant tu l'initialises dans WM_CREATE et le détruits dans WM_DESTROY.

    Il fallait faire l'un ou l'autre, mais pas les deux : Tu es tombé dans le problème inverse...

  7. #7
    Nouveau membre du Club
    Inscrit en
    Mars 2005
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 44
    Points : 35
    Points
    35
    Par défaut
    J'ai mis hdc_mask en globale et ça marche nickel.

    Merci beaucoup de ton aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec GetPixel
    Par pieroznight dans le forum Langage
    Réponses: 18
    Dernier message: 24/10/2007, 08h02
  2. VC++ Direct3D8, problème avec LPD3DXFONT et LPD3DTEXTURE8
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 03/08/2002, 11h10
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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