Bug dans mon programme au bout de quelque minutes

Résolu
angelanddelus100 Messages postés 12 Date d'inscription lundi 18 juin 2007 Statut Membre Dernière intervention 15 juillet 2007 - 10 juil. 2007 à 14:31
angelanddelus100 Messages postés 12 Date d'inscription lundi 18 juin 2007 Statut Membre Dernière intervention 15 juillet 2007 - 11 juil. 2007 à 17:59
Bonjour à tous,

Je dois developper un petit logiciel qui réalise ces fonctions



            Lister les drivers des webcams et caméras installé le pc



            Détecter  les sources vidéo branchées sur l'ordinateur



            Sélectionner la source vidéo à capturer



            Configurer les paramètres de capture (débit images, format RGB24, I420, Résolution)



            Lancer la capture vidéo



            Découper la vidéo pour obtenir une Résolution carré



            Redimensionner les images en 12 par 12 pixels



            Appliquer un filtre noir et blanc à l'image


Pour appliquer les différents filtres sur mes images j'utilise la librairy windows system drawing. Mon programme fonctionne correctement mais au bout de quelque minutes il bug...
Message d'erreur:

Une exception non gérée du type 'System.UnauthorizedAccessException' s'est produite dans Microsoft.VisualBasic.dll


Informations supplémentaires : Accès refusé.



<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>
 


 





<?xml:namespace prefix st1 ns "urn:schemas-microsoft-com:office:smarttags" /??>
<st1:metricconverter productid="0000066f" w:st="on">
0000066f
</st1:metricconverter>

  mov         dword ptr [ebp-28h],eax







La boucle de capture est la suivante et je pense qu'elle est la cause de cette erreur. Etant débutant je n'arrive pas à comprendre pourquoi (J'espere obtenir un petit d'aide pour comprendre ce probleme Merci a tous) :



Private



Sub
mWBCStream_Streamed(

ByRef
pBitMap

As
System.Drawing.Bitmap)

Handles
mWBCStream.Streamed



Compte = Compte + 1


picCur.Image = pBitMap


picCur.SizeMode = PictureBoxSizeMode.StretchImage



If
Compte = CompteRef

Then



'CompteRef = Nombre de capture de pBitMap



Compte = 0




picCur.Image.Save(FileA)









Img1.LoadFile(FileA)





''Application du filtre à l'image (couperImage)



Img1 = R11.Apply(Img1) '










''Création conteneur pour l'image à manipuler



Img2 = Img1










'Application du filtre à l'image (redimensionnerImage)



Img2 = R22.Apply(Img2)










'Verification de l'existance et destruction de la variable FileB





Resultat = Dir(FileB)





If Resultat <> ""Then


IfFileExists =




True



Kill(FileB)










Else



IfFileExists =




False






End
If






'Application du filtre à l'image (noir et blanc)



Img2.saveFile(FileB)




picCurT.Load(FileB)




Img4 = picCurT.Image




Witdthi = Img4.Width




Heighti = Img4.Height










For x = 0 To Witdthi - 1 Step 1





For y = 0 To Heighti - 1 Step 1


pixelColor = Img4.GetPixel(x, y)




Rc = pixelColor.R()




Gc = pixelColor.G()




Bc = pixelColor.B()




Moy = (Rc + Gc + Bc) / 3




newColor = Color.FromArgb(Moy, Moy, Moy)










'newColor = Color.FromArgb(Rc, Rc, Rc)



Img4.SetPixel(x, y, newColor)










Next






Next



'Affichage de l'image dans la PictureBox



picCurF.Image = Img4




picCurF.SizeMode = PictureBoxSizeMode.StretchImage










'Test de performance



StatusBar.Text =




"fps=" & Format(mWBCStream.FPS, "0.00" ) & ", perf=" & mWBCStream.GetPerf





End
If






End



Sub

Les déclarations






Dim A AsObject' Provisoir





Dim B AsInteger' Provisoir





Dim x, y AsInteger





Dim Rc AsInteger





Dim Gc AsInteger





Dim Bc AsInteger





Dim Moy AsInteger





Dim Witdthi AsInteger





Dim Heighti AsInteger





Dim pixelColor As Color





Dim newColor As Color





Dim ptr As System.IntPtr





Dim count AsLong





Dim Img4 As Bitmap





Dim pixelformat As System.Drawing.Imaging.PixelFormat





Dim IfFileExists AsBoolean





Dim ppbitmap As Bitmap





Dim Img1 AsObject





Dim Ip1 AsObject





Dim Img2 AsObject





Dim Ip2 AsObject





Dim Img3 As Bitmap





Dim Ip3 AsObject





Dim FileA AsLong





Dim FileB AsLong





Dim WidthCini AsInteger





Dim Resultat AsString





Dim Resultat1 AsObject





Dim Resultat2 AsObject





Dim Z AsInteger





Dim R11 AsObject





Dim R22 AsObject





Dim R33 AsObject





Dim CompteRef AsInteger





Dim Img5 As Bitmap





Dim uu As Color





Dim i AsInteger





Dim j AsInteger





Friend
WithEvents NumericUpDown1 As System.Windows.Forms.NumericUpDown





Dim xxxx AsBoolean





Dim xxxxx AsBoolean





Dim Compte AsInteger

2 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
11 juil. 2007 à 14:37
Je me suis très mal exprimé, mais mes pistes sont certainement moins mauvaises qu'elles en ont l'air. C'est la méthode basique quand on a ce genre de problème et que le débugueur ne s'en sort pas.

Il faut que tu localises la ligne de ton code qui est la dernière executée avant le plantage. Tu ne peux pas utiliser de points d'arrêt vu que le plantage à lieu au bout de plusieurs minutes. Il faut donc que tu fasses des genres, de "coucou je suis passé par là" (Assez utilisés quand on débute en C avec printf, et probablement encore très utilisés en php.).

Quand ça planterat, tu sauras que le problème à lieu entre le dernier message qui s'est affiché, et le suivant qui n'a pas pu avoir lieu.

Genre :

Mon programme()
  while true
    Procedure1()
    Procedure2()
  end while
End Mon programme

Procedure1()
  Ecrire("D1");
  ...
  ...
  Ecrire("F1");
end Procedure1

Procedure2()
  Ecrire("D2");

  ...

  ...

  Ecrire("F2");
end Procedure2

Ca affichera par exemple :
D1
F1
D2
F2
D1

Et là, tu sais que c'est la 1 qui plante. Et tu remet en place tes Ecrire pour te rapprocher de l'erreur par étapes successives.

Long et chiant, certe, mais si tu trouves rien d'autre, c'est tout ce qu'il te reste.
3
angelanddelus100 Messages postés 12 Date d'inscription lundi 18 juin 2007 Statut Membre Dernière intervention 15 juillet 2007
11 juil. 2007 à 17:59
Merci beaucoup rt15 pour ton aide, je pense qu'il y avait bien erreur d'écrasement de variable quelque part dans mon programme. J'ai contourné ce problème en utilisant un thread de manière à alléger ma boucle principale de capture. Maintenant tout fonctionne bien a part quand je quitte mon programme lol (j'ai plus de bug pendant son fonctionnement c'est déjà pas mal) ... Mais ne t'inquiète pas tu t'es très bien exprimé et je te remercie encore une fois pour n'aide.
3
Rejoignez-nous