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 Forms Discussion :

Problème affichage caméra


Sujet :

Windows Forms

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Problème affichage caméra
    Bonjour à tous :

    J'ai eu un pdf de la part de mes prof pour pouvoir afficher une caméra via une Windows Form, le code semble bon mais la caméra ne s'affiche toujours pas, je vous envoie le pdf et le code : TP 3 - classe_camera.pdf

    Pour ma classe Caméra :

    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Net;
    using System.IO;
    using System.Drawing;
    using System.Windows.Forms;
     
    namespace IHMCamera
    {
        class Camera
        {
            // Attributs 
            private string Resolution;
            private string AdresseIP;
            private Bitmap Image;
     
     
            // Methodes
            public Camera(string Res, string Ip)
            {
                Resolution = Res;
                AdresseIP = Ip;
                Image = null;
            }
     
            public Boolean TextExistence()
            {
                bool CamExiste = true;     // booleen qui sera retourné pour indiquer si oui ou non une camera est présente
     
                // on utilise une structure try ... catch afin de ne pas perturber le système d'exploitation en cas d'erreur
                try
                {
                    // on construit notre requete http
                    HttpWebRequest Reponse = (HttpWebRequest)WebRequest.Create("http://150.200.5.24/view/viewer_index.shtml?id=800x600");
                    // Si la réponse existe et contient des données
                    if (Reponse.ContentLength > 0)
                        CamExiste = true;
                    // Sinon c'est qu'il n'y a pas de réponse donc pas de camera 
                }
                catch
                {
                    CamExiste = true;
                }
     
                return CamExiste;
            }
     
            public void CaptureImage(PictureBox CaptureCam)
            {
                string sourceURL = "http://150.200.5.24/view/viewer_index.shtml?id=800x600";
                byte[] buffer = new byte[1000000];      // Buffer destiné à recevoir les données lues dans le flux
                int read, total = 0;
                HttpWebRequest req;      // Objet utilisé pour envoyer une requete http vers le serveur web embarqué de la camera
                // Obtenir la reponse
                WebResponse resp;       // Objet utilisé pour récupérer la réponse http de la caméra 
                // Obtenir la reponse stream
                Stream stream;       // Objet utilisé pour récupérer les données contenues dans la réponse
     
                try
                {
                    // Créer une requete HTTP
                    req = (HttpWebRequest)WebRequest.Create(sourceURL);      // Objet utilisé pour envoyer une requete http vers le serveur web embarqué de la camera
     
                    // Obtenir la reponse
                    resp = req.GetResponse();       // Objet utilisé pour récupérer la réponse http de la caméra 
     
                    // Obtenir la reponse stream
                    stream = resp.GetResponseStream();       // Objet utilisé pour récupérer les données contenues dans la réponse
     
                    // lire les données d'un stream 
                    while ((read = stream.Read(buffer, total, 100000)) != 0)
                    {
                        total += read;
                        Bitmap Afficher = (Bitmap)Bitmap.FromStream(new MemoryStream(buffer, 0, total));
                        CaptureCam.SizeMode = PictureBoxSizeMode.StretchImage;
                        CaptureCam.Image = Afficher;
                    }
     
                }
                catch (Exception)
                {
                    Console.Write("Erreur lors de l'opération ");
                }
     
            }
        }
    }
    Et pour mon Form1.cs :

    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Drawing.Imaging;
    using System.IO;
    using System.Linq;
    using System.Net;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
     
    namespace IHMCamera
    {
        public partial class ControleCam : Form
        {
            Camera Cam1;
     
     
            public ControleCam()
            {
                    InitializeComponent();
     
     
     
     
            }
     
            private void SaisirIP_TextChanged(object sender, EventArgs e)
            {
                Valider.Enabled = true;
            }
     
            private void ControleCam_Load(object sender, EventArgs e)
            {
                Valider.Enabled = false;
                SaisirIP.Enabled = false;
                Capture.Enabled = false;
                radioButtonOui.Enabled = false;
                radioButtonNon.Enabled = false;
                Cam1 = new Camera(ListeResolution.Text, SaisirIP.Text);
                Cam1.CaptureImage(VueCam);
     
            }
     
            private void ListeResolution_SelectedIndexChanged(object sender, EventArgs e)
            {
                SaisirIP.Enabled = true;
            }
            private void Valider_Click(object sender, EventArgs e)
            {
     
                Capture.Enabled = true;
     
            }
     
            private void Capture_Click(object sender, EventArgs e)
            {
                Cam1 = new Camera(ListeResolution.Text, SaisirIP.Text);
                Cam1.CaptureImage(VueCam);
     
                radioButtonOui.Enabled = true;
                radioButtonNon.Enabled = true;
                timer1.Enabled = true;
     
     
            }
     
            private void VueCam_Click(object sender, EventArgs e)
            {
     
            }
     
            private void radioButtonOui_CheckedChanged(object sender, EventArgs e)
            {
                DateTime d = DateTime.Now;
     
                VueCam.Image.Save("c:\\temp\\ImageCap" + d.ToFileTime().ToString() + ".jpeg", ImageFormat.Jpeg);
            }
     
            private void timer1_Tick(object sender, EventArgs e)
            {
                Cam1 = new Camera(ListeResolution.Text, SaisirIP.Text);
                Cam1.CaptureImage(VueCam);
     
            }
        }
    }
    Merci de votre aide en avance

  2. #2
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Salut,

    c'est normal que quand je trace les IP fournies dans la doc je me retrouve dans le Missouri ?
    Plus je connais de langages, plus j'aime le C.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par jopopmk Voir le message
    Salut,

    c'est normal que quand je trace les IP fournies dans la doc je me retrouve dans le Missouri ?

    Bonsoir, c'est pas normal, ce sont des camera IP de lycée mais l'adresse a du être réattribué, c'est pour ça que dans mon code, c'est l'adresse IP d'une autre caméra, ma caméra de projet qui change tout les jours, j'essaye juste de faire afficher la caméra sur la picturebox mais impossible, quelque soit l'adresse que je met

    Merci d'avance

  4. #4
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Disons que je connais pas trop ce domaine, j'ai juste trouvé les IP de la doc plutôt étranges (je m'attendais plutôt à de l'IP locale en 10., 172. ou 192.), et je me suis donc dit que pointer vers une mauvaise IP pourrait être une raison de plantage de ton code.
    Plus je connais de langages, plus j'aime le C.

  5. #5
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 695
    Points
    10 695
    Billets dans le blog
    21
    Par défaut
    Bonjour,

    Je pense que le problème vient de là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    // lire les données d'un stream 
    while ((read = stream.Read(buffer, total, 100000)) != 0)
    {
       total += read;
       Bitmap Afficher = (Bitmap)Bitmap.FromStream(new MemoryStream(buffer, 0, total));
       CaptureCam.SizeMode = PictureBoxSizeMode.StretchImage;
       CaptureCam.Image = Afficher;
    }
    Tu ne peux pas créer ton bitmap alors que les données sont incomplètes.

    Il faut, dans ta boucle while, que tu récupères toutes les données dans un stream (un memorystream sera très bien ici, sauf si la taille des images venait à "exploser"), ensuite, après le while, tu créés ton image et tu initialises la propriété CaptureCam.Image.

    Mais attention ! La classe Bitmap implémente l'interface IDisposable, il faut donc libérer correctement les données une fois qu'elles ne sont plus nécessaire via un appel à la méthode Dispose() !

    Comme il s'agit d'un exercice, je ne donne volontairement pas de code, juste les idées
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

Discussions similaires

  1. Réponses: 0
    Dernier message: 08/11/2012, 10h52
  2. Réponses: 10
    Dernier message: 08/06/2009, 11h30
  3. Problème affichage primitive
    Par goutbouyo dans le forum DirectX
    Réponses: 4
    Dernier message: 29/12/2004, 18h25
  4. [Plugin][VE] Problème affichage
    Par sebb84 dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 05/07/2004, 14h50
  5. [DOS] Problème affichage de DOS dans un Memo
    Par Pedro dans le forum API, COM et SDKs
    Réponses: 9
    Dernier message: 25/06/2004, 13h31

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