cs_fcolo
Messages postés201Date d'inscriptionmercredi 8 février 2006StatutMembreDernière intervention20 février 2007
-
13 févr. 2006 à 16:51
cs_fcolo
Messages postés201Date d'inscriptionmercredi 8 février 2006StatutMembreDernière intervention20 février 2007
-
14 févr. 2006 à 10:12
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.
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):
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:
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);
cs_fcolo
Messages postés201Date d'inscriptionmercredi 8 février 2006StatutMembreDernière intervention20 février 20072 14 févr. 2006 à 10:12
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
image = System.Text.ASCIIEncoding.UTF8.GetBytes(imageB, 0, imageA.Length - 1);
par
encoding.GetBytes(imageB, 0, imageB.Length, image, 0);
et se servir de ce tableau de byte[] pou le MemoryStream.
cs_fcolo
Messages postés201Date d'inscriptionmercredi 8 février 2006StatutMembreDernière intervention20 février 20072 14 févr. 2006 à 08:04
Je fais une boucle:
for (
int i = 0; i < imageA.Length-1; i++)
{
imageB[i] = (
char)imageA.GetValue(i);
}
de 0 jusqu'a
imageA.Length-1 pour avoir mes imageA.Length éléments, c'est un tableau a valeur initiale en zéro.
J'avais fait l'erreur au début et j'avais une erreur, pas un buffer overflow mais comme quoi imageB[i] ne pouvait pas prendre une valeur infini.
cs_fcolo
Messages postés201Date d'inscriptionmercredi 8 février 2006StatutMembreDernière intervention20 février 20072 14 févr. 2006 à 08:41
Oula, je suis pas en forme de bon matin ...
Donc oui, tu as raison, il faudrais bien imageA.lengt mais il m'avait fait l'erreur decrite plus haut et j'ai pas réfléchie plus loin ..
Je ne l'ai toujours pas résolu, j'essais de faire plus simple deja, n'afficher que la premiere image, pas le flux, on verra ce que ca donne.