VB.NET problème de save de picturebox [Résolu]

kyoleroi 33 Messages postés lundi 10 décembre 2007Date d'inscription 26 mai 2008 Dernière intervention - 14 mai 2008 à 09:01 - Dernière réponse : kyoleroi 33 Messages postés lundi 10 décembre 2007Date d'inscription 26 mai 2008 Dernière intervention
- 29 mai 2008 à 09:27
bonjour,
Je cherche l'erreur dans mon code!
Je désire enregistrer une pictureBox avec la commande pictureBox.Image.save(nomfichier, imageFormat.jpeg)
mais j'ai une erreur qui se génère lors de l'exécution:

"L'exception System.NullReferenceException n'a pas été gérée
  Message="Variable objet ou variable d'un bloc With non définie."

Donc je ne sais pas comment résoudre se problème.
J'avais déjà réaliser la fonction avec une savedialog mais bon l'apparition de la boite de dialogue est pénible.
Comment dois je faire pour enlever cette erreur?

cordialement
Afficher la suite 

15 réponses

Répondre au sujet
kyoleroi 33 Messages postés lundi 10 décembre 2007Date d'inscription 26 mai 2008 Dernière intervention - 29 mai 2008 à 09:27
+3
Utile
Salut sa y est sa marche.

Désolé mais je n'ai pas utiliser la réponse que tu ma fournis.

En faite pour ce qui est de la photo j'utilise un stream! le problème est que je n'attend pas que mon stream photo soit fini pour l'enregistrer alors j'ai mis un code de ce type:

sub prendrephoto ()
'stream remplisage de la picturebox
'attente de la fin de la séquence
do while photo pas fini
   application.doevents()
end while
if photo fini then
   sauvegarder photo
end if

end sub
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de kyoleroi
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 14 mai 2008 à 09:12
0
Utile
ne pas tenter de faire un save sur un objet image qui n'existe pas (image est une reference nulle, dans ton projet)
Commenter la réponse de Renfield
kyoleroi 33 Messages postés lundi 10 décembre 2007Date d'inscription 26 mai 2008 Dernière intervention - 14 mai 2008 à 09:22
0
Utile
Je fais commen alors pour résoudre se problème?

cordialement
Commenter la réponse de kyoleroi
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 14 mai 2008 à 09:25
0
Utile
qu'as tu, dans ce picturebox ?

image est une reference à un objet nul, donc, pas d'image, a priori
Commenter la réponse de Renfield
kyoleroi 33 Messages postés lundi 10 décembre 2007Date d'inscription 26 mai 2008 Dernière intervention - 14 mai 2008 à 09:40
0
Utile
en fait dans ma picture box, je récupère une image via une web cam ensuite, je la traite puis je l'enregistre, avec la boite de dialogue savedialogue sa marche mais avec un save simple non, peut être que je fais mon save trop tot?
Commenter la réponse de kyoleroi
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 14 mai 2008 à 09:52
0
Utile
tu aurais du code (limite du qui fonctionne et du qui fonctionne pas) ?
Commenter la réponse de Renfield
kyoleroi 33 Messages postés lundi 10 décembre 2007Date d'inscription 26 mai 2008 Dernière intervention - 14 mai 2008 à 10:45
0
Utile
Sa va être long mais voila le code complet de ma gestion de web cam avec saisie de picturebox en sauvegarde:
Vous trouverez en vert la méthode de sauvegarde.
Imports DirectX.Capture




Public Class Form1
    Inherits System.Windows.Forms.Form
    Dim NombreDeCapture As Int16
    Dim TimeElapsCapture As Integer
    Dim StartTime As Date





    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load





        Dim j As Short
        Dim f As Filter





        'listage des peripheriques video installés sur la machine
        ComboBox1.Items.Clear()
        For j = 0 To Dispositivos.VideoInputDevices.Count - 1
            f = Dispositivos.VideoInputDevices(j)
            ComboBox1.Items.Add(f.Name)
        Next
        If j > 0 Then ComboBox1.SelectedIndex = 0





        'listage des peripheriques audio installés sur la machine
        ComboBox2.Items.Clear()
        For j = 0 To Dispositivos.AudioInputDevices.Count - 1
            f = Dispositivos.AudioInputDevices(j)
            ComboBox2.Items.Add(f.Name)
        Next
        If j > 0 Then ComboBox2.SelectedIndex = 0





    End Sub





    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click





        'pre configuration du capturing
        'definission de la camera
        CaptureInformation2.Camera = Dispositivos.VideoInputDevices(ComboBox1.SelectedIndex)
        'mise en place du stream video et audio
        CaptureInformation2.CaptureInfo = New DirectX.Capture.Capture(CaptureInformation2.Camera, Dispositivos.AudioInputDevices(ComboBox2.SelectedIndex))
        'renseignement du panneau d'affichage de la video
        CaptureInformation2.CaptureInfo.PreviewWindow = PictureBox2
        'compteur pour les capture d'image (frame video)
        CaptureInformation2.Counter = 1
        CaptureInformation2.CounterFrames = 1
        'configurations avancées
        Configurer()
        'pour faire plus joli
        Button1.Enabled = False
        'pour la gestion evennementiel de la capture d'ecran je cree un gestionnaire d evennement sur Framecapturecomplete
        AddHandler CaptureInformation2.CaptureInfo.FrameCaptureComplete, AddressOf NewCaptureReady
    End Sub





    Private Sub Configurer()





        'configurations avancées
        'configuration du systeme de compression video et audio
        CaptureInformation2.CaptureInfo.VideoCompressor = Dispositivos.VideoCompressors(1) 'compression video
        'taille de la video
        CaptureInformation2.CaptureInfo.FrameSize = New Size(320, 240) 'taille de la video
        'FPS de la video
        CaptureInformation2.CaptureInfo.FrameRate = 50 'FPS
        'fichier .avi
        ''CaptureInformation.CaptureInfo.Filename = Application.StartupPath + "\essai.avi"
        'lancement du streaming d'affichage
        CaptureInformation2.CaptureInfo.RenderPreview()





    End Sub





    Private Sub NewCaptureReady(ByVal Sender As System.Windows.Forms.PictureBox)
        'appele par le gestionnaire de handler sur l'evennement "FrameCapture
        'ma picture capturé est arrivée...





        Dim la As PictureBox = CType(Sender, PictureBox) 'la je converti mon picturebox en picturebox...je sais pas pourquoi, fo le faire sinom ca marche pas





        '' histoire de savoir combien ca prends de temps de faire une capture.
        Dim RunLength As System.TimeSpan = Now.Subtract(StartTime)
        Dim TimeElapsCapture As Integer = RunLength.Milliseconds





        Label1.Visible = True
        NombreDeCapture = NombreDeCapture + 1
        Label1.Text = "Capture nmr:" & NombreDeCapture & " Capture realisée en:" & TimeElapsCapture & " ms"
        PictureBox1.Image = la.Image 'j affecte ma capture d'image a mon picturebox qui attend que ca.





    End Sub





    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        'demande une capture DirectX ...et lorsqu'elle est ready je la recoit par le Handler cree un peut plus haut
        Dim StartTime = Now    ' Starting date/time.
        CaptureInformation2.CaptureInfo.CaptureFrame()

'premier cas: bug, mais fonctionne si je l'insere dans un bouton donc je pense qui faut faire un delay pour attendre que la capture soit bien faite!!!

        PictureBox2.Image.save("nomfichier.jpeg", imageformat.jpeg)

'deuxième cas: marche
        Dim ds
        ds = New SaveFileDialog()
        ds.FileName = "c:\toto.bmp"
        ds.Title = "Save Image as..."
        ds.Filter = "Bitmap file (*.bmp)|*.bmp"
        ds.FilterIndex = 1
        If (ds.ShowDialog() <> Windows.Forms.DialogResult.OK) Then
            Return
        End If






        PictureBox2.Image.Save(ds.FileName)






    End Sub
End Class
Commenter la réponse de kyoleroi
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 14 mai 2008 à 11:07
0
Utile
y'a pas un event (ou delegate a placer) qui te previens que ta capture est prête ?

ou possibilité de placer un Application.Doevents pour lui laisser les temps
Commenter la réponse de Renfield
kyoleroi 33 Messages postés lundi 10 décembre 2007Date d'inscription 26 mai 2008 Dernière intervention - 14 mai 2008 à 11:16
0
Utile
oui c'est cela que je cherche à faire, parce que comme on le vois, j'attend que mon image soit prète pour que je la mettent dans ma pictureBox, mais je ne connais pas les commande Application.Doevents!!!
Comment à votre avis je pourrais faire?

cordialement
j'avais penser à une scrutation de ma pictureBox1.image et a chaque fois quelle est modidfier je l'enregistre!
Commenter la réponse de kyoleroi
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 14 mai 2008 à 11:29
0
Utile
ce genre de boucle d'attente ?

Do While PictureBox1.Image Is Nothing
Application.Doevents
Loop
Commenter la réponse de Renfield
kyoleroi 33 Messages postés lundi 10 décembre 2007Date d'inscription 26 mai 2008 Dernière intervention - 14 mai 2008 à 13:24
0
Utile
Merci c cool avec sa sa marche!!!

Par contre une chose, quand je fais plusieur sauvegarde a la suite, un message d'erreur s'affiche me disant qu'une mémoire est endomager alors que nada!!!
Je ne sais pas commen faut-il que je face?
Cela vient-il de la taille de mon image?

Cordialement
Commenter la réponse de kyoleroi
kyoleroi 33 Messages postés lundi 10 décembre 2007Date d'inscription 26 mai 2008 Dernière intervention - 16 mai 2008 à 11:36
0
Utile
Bonjour,


J'ai un autre problème qui est le suivant c'est que la photo que j'enregistre n'est pas la photo que je visualise.


J'ai un décalage, sa me donne,


Photo 1 => Save Picture Photo 1


Photo 2 => Save Picture Photo 1


Photo 3 => Save Picture Photo 2
...
Photo n => Save Picture Photo n-1

Se décalage est vraiment génant. j'ai mis une application.doevent mais sa ne change rien, j'ai un bug d'écriture (on me dit que la mémoire est endomager mais bon...) donc une photo sur 4 est ratter(cad que le fichier JPEG est vide).

Alors d'où peut venir les erreurs?
Je récap:

erreur 1:
=> Retard sur les savegarde de photo

erreur 2 :
=> Problème lors de la sauvegarde

Cordialement
Commenter la réponse de kyoleroi
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 16 mai 2008 à 11:57
0
Utile
tu peux jouer avec plusieurs Picturebox

tu capture vers la une puis vers la deux, puis la 3 et enfin la 4 et re la 1, la 2

et tu sauvegarde chaque picturebox pendant qu'elle ne sert pas
Commenter la réponse de Renfield
kyoleroi 33 Messages postés lundi 10 décembre 2007Date d'inscription 26 mai 2008 Dernière intervention - 20 mai 2008 à 08:21
0
Utile
Sa ne pourrai pas fonctionner car j'aurai toujour se retard, car la photo que je prend, est la photo que je sauvegarde!!! Alors comment faire?

Cordialement

ps: le application.doevent ne marche pas pour cela.
Commenter la réponse de kyoleroi
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 20 mai 2008 à 08:37
0
Utile
"car la photo que je prend, est la photo que je sauvegarde!!!"

justement, fais la photo1, puis la photo2 pendant que la 1 est sauvegardée, etc...
Commenter la réponse de Renfield

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.