Ram avec utilisation de getpixel sur une fenetre opengl

Signaler
Messages postés
261
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
27 septembre 2008
-
Messages postés
84
Date d'inscription
lundi 6 novembre 2000
Statut
Membre
Dernière intervention
25 juillet 2008
-
yop yop

Je fais du getpixel et getDC sur une fenetre openGL et le prog se met a tout faire ramer en fonction du temps. Donc au bout d'un moment, tout plante.
Il y a ptet un buffer a vidé ou autre

J'utilise le getpixel dans un timer de 200ms

Voila si vous avez une idée du probleme n'hesitez pas :)

6 réponses

Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
14
Salut,

La neige tombe.

C'est la saison des GetPixel.


Les HDC récupérés avec GetDC doivent être libérés avec ReleaseDC, à part si la fenêtre à été crée avec un style CS_OWNDC.


Si tu fais un Release, montre éventuellement des bouts de ton code ici
(Après t'être assurer que le problème vient bien de ton GetPixel et pas
d'une allocation mémoire pour dans le traitement de la couleur du
pixel).


Je n'ai jamais essayé OpenGL, mais je suppose que tu dessines sur un
buffer que tu "présentes" ensuite à l'écran. Peut être peut tu
récupérer la couleur sur le buffer. Après c'est pas dit que ce soit top
côté performance...
<hr size="2" width="100%" />3ème année en ecole d'ingé d'info cherche stage de 4 mois à partir du 01/04/08
Messages postés
84
Date d'inscription
lundi 6 novembre 2000
Statut
Membre
Dernière intervention
25 juillet 2008
1
hello,
j'a'i eut exactement le meme pb, je me permet de faire le coucou
plantait sans le release
ne plante plus avec
CQFD jusqu'au prochain CRTL SHIFT ECHAP
(code vb6 mais testé également en vbnet)

' Retourne la couleur du pixel de coordonnées (X,Y)
Public Function CurPixelColor(ByVal X As Long, ByVal Y As Long) As Couleur

    Dim hdc As Long
    Dim pixel As Couleur, RGBPx As Long
   
   
    ' Pixel (X,Y) de l'écran (hwnd = 0)
    RGBPx = GetPixel(hdc, X, Y)

    hdc = GetDC(0&)  'on prend le hdc de la form, obligatoire
    Call ReleaseDC(frmGetPixel.hWnd, hdc)
   
    ' Décompose la couleur (chaque octet représente une composante de la couleur)
    pixel.red = &HFF& And RGBPx
    pixel.green = (&HFF00& And RGBPx) \ 256
    pixel.blue = (&HFF0000 And RGBPx) \ 65536
       
    ' Retourne le résultat
    CurPixelColor = pixel

End Function
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
14
Salut,


Initialise tes variables, bon sang.

Tu passe hdc à GetPixel sans l'avoir initialisé : Espère pas que ça tourne...


    hdc = GetDc(0)

    RGBPx = GetPixel(hdc, X, Y)

    Call ReleaseDC(0, hdc)

<hr size="2" width="100%" />3ème année en ecole d'ingé d'info cherche stage de 4 mois à partir du 01/04/08
Messages postés
84
Date d'inscription
lundi 6 novembre 2000
Statut
Membre
Dernière intervention
25 juillet 2008
1
Hello rt15 !
effectivement, j'ai tout emmélé avec mes copier coller !!!
le fait est que chez moi c t correct, je remet dans le bon ordre pour les copiercolleur fou

(code vb6 mais testé également en vbnet)

' Retourne la couleur du pixel de coordonnées (X,Y)
Public Function CurPixelColor(ByVal X As Long, ByVal Y As Long) As Couleur

    Dim hdc As Long
    Dim pixel As Couleur, RGBPx As Long
   
   
    ' Pixel (X,Y) de l'écran (hwnd = 0)
    hdc = GetDC(0&)  'on prend le hdc de la form, obligatoire

    RGBPx = GetPixel(hdc, X, Y)
    Call ReleaseDC(frmGetPixel.hWnd, hdc)
   
    ' Décompose la couleur (chaque octet représente une composante de la couleur)
    pixel.red = &HFF& And RGBPx
    pixel.green = (&HFF00& And RGBPx) \ 256
    pixel.blue = (&HFF0000 And RGBPx) \ 65536
       
    ' Retourne le résultat
    CurPixelColor = pixel

End Function

je t'envoi un mp rapport à ta demande de stage, ca pourrait m'interresser !
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
14
Le premier argument de ReleaseDC doit être le handle de la fanêtre à qui ont a demandé un DC


Donc essaye plutôt avec Call ReleaseDC(0, hdc)


Pour savoir si ça a fonctionner, tu peux tester la valeur de retour.


if RelesaseDC(0, hdc) = 0 then MsgBox "Echec de la libération"

<hr size="2" width="100%" />3ème année en ecole d'ingé d'info cherche stage de 4 mois à partir du 01/04/08
Messages postés
84
Date d'inscription
lundi 6 novembre 2000
Statut
Membre
Dernière intervention
25 juillet 2008
1
ok
mais je réitère, ca marche bien comme ca !
ca semble cependant plus logique en effet