Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Modifier périodiquement (25 fps) l'image dans une pictureBox [ Archives / Multimédia ] (fcolo)

lundi 13 février 2006 à 16:51:21 | Modifier périodiquement (25 fps) l'image dans une pictureBox

fcolo

Membre Club
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.

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):

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);

}
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


lundi 13 février 2006 à 17:28:01 | Re : Modifier périodiquement (25 fps) l'image dans une pictureBox

Lutinore

Administrateur CodeS-SourceS
Salut..

Pourquoi tu utilises cette expression "imageA.Length-1" au lieu de "imageA.Length" ?

mardi 14 février 2006 à 08:04:45 | Re : Modifier périodiquement (25 fps) l'image dans une pictureBox

fcolo

Membre Club
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.

f.colo

mardi 14 février 2006 à 08:41:04 | Re : Modifier périodiquement (25 fps) l'image dans une pictureBox

fcolo

Membre Club
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.

f.colo

mardi 14 février 2006 à 10:12:13 | Re : Modifier périodiquement (25 fps) l'image dans une pictureBox

fcolo

Membre Club
Réponse acceptée !
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.

Voila.

f.colo



Cette discussion est classé dans : system, image, first, char, second


Répondre à ce message

Sujets en rapport avec ce message

[c#]Limiter utilisation du CPU, travail flux video [ par fcolo ] Bonjours tout le monde,j'ai devellopper une application de capture de flux mjpg.Malheureusement, elle me consomme énormément de CPU.Je souhaiterai sav Gros bug de portabilité... comment faire??? [ par Hammings ] Bonjour, J'ai fait un programme en C# qui rajoute du texte dans une image BMP… Le programme fonctionne correctement sur mon ordi (que ca soit en mode OutOfMemoryException quand je fait Graphics.FromImage [ par FPell ] J'ai un programme qui sert à modifier une image et ajouter du texte dessus et il supporte l'opération annuler. Mais quand je clone l'image originale ( rotation d'image. probleme avec graphics [ par Vincent ] Bonjour à tous,mon objectif est de pouvoir "cadrer" une image provenant d'un scan. Celle ci serait un peu penchée et ne serait pas conforme pour un tr Heritage, Image, classe abstraite [ par TeBeCo ] suite à une charmante tentative d'hérité de la classe System.Drawing.Image je me retrouve confronter à un super problème :Aucun constructeur n'est déf Probleme avec fonction smoothingmode du system.drawing.image [ par kowalska ] Bonjour a tous, Nous avons un serveur en windows 2000. Nous avons un script C# qui utilise system.drawing.image. Script utilisé System.Drawing.Im probleme avec pictureBox [ par ralf9 ] bonjour ! voila j'ai un problème avec le pictureBox ??? j'ai fait un code qui charge une image dans pictureBox. en suite j'ai fait des graphiques (lig Utilisation System.Resources [ par jeanajaccio ] Bonjour à tous,J'ai besoin d'un petit coup de main :J'ai créé un méthode qui génére dynamiquement une picture box mais je voudrais que l'image change Ajouter dynamiquement des composants graphiques [ par Sebulba ] Bonjourj'ai un thread qui doit créer un élément graphique sur la form pour pouvoir se représenter.mon problème est que je n'arrive pas à afficher une


Nos sponsors

Sondage...

CalendriCode

Novembre 2008
LMMJVSD
     12
3456789
10111213141516
17181920212223
24252627282930

Consulter la suite du CalendriCode

Appels d'offres

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,468 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.