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 :

[C#]Modifier l'image dans une PictureBox depuis un flux http


Sujet :

Windows Forms

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 9
    Points : 6
    Points
    6
    Par défaut [C#]Modifier l'image dans une PictureBox depuis un flux http
    Bonjour,

    Je travaille actuellement sur des caméra AXIS qui fournissent un flux mjpg.
    J'arrive à récupérer chaque fichier JPEG de ce flux et les ecrirent distinctement dans des fichiers.
    Maintenant, j'aimerai en plus de les sauvegarder de pouvoir les visualiser dans une meme pictureBox (ou autre) pour voir la video depuis mon application.
    J'ai parcouru le forum et j'ai trouvé des indications que je n'arrive pas à employer.
    Je lis les image caractere par caractere afin de chercher le début et la fin de l'image dans le flux. Ensuite j'ecris chaque caractere dans un fichier. En plus de celà, je les place dans une ArrayList car je ne connais pas la taille de l'image à l'avance.
    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
    WebRequest myRequest;
    StreamReader streamRead = null;
    FileStream fs;
    StreamWriter ecrire;
    Encoding encoding = System.Text.Encoding.GetEncoding("iso-8859-1"); 
    Stream myStream;
    WebResponse myResponse;
    char forallMASK = Convert.ToChar(255); //OxFF
    char InitImgMASK = Convert.ToChar(216);//OxD8
    char EndImgMASK = Convert.ToChar(217); //OxD9
    char first = Convert.ToChar(0);
    char[] second = new char[1];
    ArrayList myAL = new ArrayList();
    myRequest = System.Net.WebRequest.Create(IP);
    myRequest.Credentials = new System.Net.NetworkCredential(User, Pass);
    myResponse = myRequest.GetResponse();
    myStream = myResponse.GetResponseStream();
    streamRead = new System.IO.StreamReader(myStream, encoding);
    fs = new System.IO.FileStream(path, System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.Write);
    ecrire = new System.IO.StreamWriter(fs, encoding);
    while ((first.CompareTo(forallMASK) != 0) || (second[0].CompareTo(InitImgMASK) != 0))
    {
    first = second[0];
    streamRead.Read(second, 0, 1);
    }
    while ((first.CompareTo(forallMASK) != 0) || (second[0].CompareTo(EndImgMASK) != 0))
    {
    ecrire.Write(first);
    myAL.Add(first);
    first = second[0];
    streamRead.Read(second, 0, 1);
    }
    ecrire.Write(first);
    myAL.Add(first);
    ecrire.Write(second);
    myAL.Add(second);
    ecrire.Close();
    fs.Close();
    streamRead.Close();
    myStream.Close();
    A la fin de la réception d'une image, je me retrouve avec un fichier .jpg sauvegardé et une ArrayList en mémoire.
    Je voudrais depuis les caractere contenu dans l'ArrayList cree mon image.
    Depuis un MemoryStream je peux afficher l'image grace à un tableau de Byte[ ](image):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MemoryStream myMS = new MemoryStream(image);
    pictureBox1.Image = Image.FromStream(myMS);
    Malheureusement, mon ArrayList (myAL) est rempli de Char. Je dois donc convertir chaque Char en Byte:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Array imageA = myAL.ToArray();
    char[] imageB = new char[imageA.Length];
    byte[] image = new byte[imageA.Length];
    for (int i = 0; i < imageA.Length-1; i++)
    {
    imageB[i] = (char)imageA.GetValue(i);
    }
    image = System.Text.ASCIIEncoding.UTF8.GetBytes(imageB, 0, imageA.Length - 1);
    Ici, image est donc un tableau de bytes.

    Mais ca marche pas
    il me dit que mon myMS lors de l'appel à Image.FromStream(myMS); n'est pas valide.

    Ca fait un moment que je me triture l'esprit mais là j'ai besoin d'aide.

    Merci

    f.colo

    [edit]Tag et Titre modifier, merci Morpheus du petit rappel je le referai plus ^^[/edit]

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    OK, j'ai trouvé comment faire.
    Lorsque je convertissais mon tableau de char[] en tableau de byte[], je ne respectais pas l'encodage que je me servais lors de la lecture du stream.

    Dans ma fonction private byte[] getByteArrayList(ArrayList myAL) [le dernier code donné dans mon premier message), il faut remplasser la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    image = System.Text.ASCIIEncoding.UTF8.GetBytes(imageB, 0, imageA.Length - 1);
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    encoding.GetBytes(imageB, 0, imageB.Length, image, 0);
    et se servir de ce tableau de byte[] pou le MemoryStream.

    Voila.

    f.colo

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. placer un image dans une PictureBox - vbNet
    Par hunteshiva dans le forum Windows Forms
    Réponses: 6
    Dernier message: 25/04/2011, 15h39
  2. Réponses: 3
    Dernier message: 26/05/2010, 17h45
  3. Probléme d'image dans une picturebox
    Par Arsou dans le forum Windows Forms
    Réponses: 2
    Dernier message: 30/09/2009, 14h31
  4. Plusieurs images dans une PictureBox
    Par adien.fanget dans le forum Windows Forms
    Réponses: 8
    Dernier message: 13/02/2009, 16h42

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