Ram avec utilisation de getpixel sur une fenetre opengl

adess00 Messages postés 261 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 27 septembre 2008 - 15 nov. 2007 à 16:40
cs_mabrouklepoux Messages postés 84 Date d'inscription lundi 6 novembre 2000 Statut Membre Dernière intervention 25 juillet 2008 - 11 déc. 2007 à 13:36
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

cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
15 nov. 2007 à 18:45
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
cs_mabrouklepoux Messages postés 84 Date d'inscription lundi 6 novembre 2000 Statut Membre Dernière intervention 25 juillet 2008 1
10 déc. 2007 à 23:46
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
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
11 déc. 2007 à 10:06
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
cs_mabrouklepoux Messages postés 84 Date d'inscription lundi 6 novembre 2000 Statut Membre Dernière intervention 25 juillet 2008 1
11 déc. 2007 à 10:17
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 !

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
11 déc. 2007 à 12:45
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
cs_mabrouklepoux Messages postés 84 Date d'inscription lundi 6 novembre 2000 Statut Membre Dernière intervention 25 juillet 2008 1
11 déc. 2007 à 13:36
ok
mais je réitère, ca marche bien comme ca !
ca semble cependant plus logique en effet
Rejoignez-nous