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.
A la fin de la réception d'une image, je me retrouve avec un fichier .jpg sauvegardé et une ArrayList en mémoire.
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();
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):
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 MemoryStream myMS = new MemoryStream(image); pictureBox1.Image = Image.FromStream(myMS);
Ici, image est donc un tableau de bytes.
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);
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]
Partager