Transfert image

laymouna98 Messages postés 71 Date d'inscription mardi 4 novembre 2008 Statut Membre Dernière intervention 26 août 2009 - 21 janv. 2009 à 11:48
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 - 22 janv. 2009 à 09:19
salut à tous


je travaille avec VS2008, c# et sql server 2005


j'ai deux bases de données sql server chacune sur une machine à part j'ai la même table article sur les deux bases, j'ai le champs image de type image sur chacunne des table, je fait à travers d'un Web service récupérer le champs image du table1 de la base1  et faire l'insertion dans l'autre table du deuxième base,  il est inseré sous forme d'un tableau byte.


ensuite je veux faire la conversion de ce tableau de byte en image  il me génère une erreur, alors que c'est fonctionnel pour l'autre tableau de byte de l'image du première table.


ma question c'est lors de l'insersion des données du table1 dans la table2 est ce que les données seront modifiés ou altérés???


j'epère que c'est compris pour vous

8 réponses

leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
21 janv. 2009 à 15:42
la question est : comment recrées tu l'image?

si ton (pseudo) code est le suivant, cest normal que ca plante, a cause d'un bug dans le framework :

void GetImage()
{
MemoryStream ms = new MemoryStream();
ms.Write(MonImageSousFormeDeTableauDeByte);
Image g = Image.FromStream(ms);
ms.Close();

MethodQuiUtiliseLImage();
}

Le bug est que lorsque tu ferme le stream, l'image n'a pas fini d'être créée. Deux solutions :

1 - Modifier ton code de la manière suivante
void GetImage()
{
MemoryStream ms = new MemoryStream();
ms.Write(MonImageSousFormeDeTableauDeByte);
Image g = Image.FromStream(ms);
ms.Close();

MethodQuiUtiliseLImage();
}
La, lorsque tu ferme le stream, l'image est réellement chargée et le stream peut etre libéré.

2 - Créer une image temporaire pour forcer a lire le stream :
public Image GetImage(MemoryStream s)
{
Image Temp = Image.FromStream(s);

Bitmap b = new Bitmap(Temp.Width, Temp.Height);
Graphics g = Graphics.FromImage(b);
g.DrawImage(Temp, 0, 0, Temp.Width, Temp.Height);
g.Dispose();
Temp.Dispose();

return b;
}

Au moins, l'image est réellement chargée lorsque tu ferme le stream passé en entrée de la méthode
0
laymouna98 Messages postés 71 Date d'inscription mardi 4 novembre 2008 Statut Membre Dernière intervention 26 août 2009 1
21 janv. 2009 à 16:06
j'ai fait le presque le même code mais il me génère une erreur dans la ligne suivante :
Image Temp = Image.FromStream(s);
L'erreur est : Parameter is not valid.
je croi que l'erreur et dans le tableau de byte transférer de le base de mon application vers la base du site web.
0
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
21 janv. 2009 à 16:33
comment as tu créé/rempli s?
0
laymouna98 Messages postés 71 Date d'inscription mardi 4 novembre 2008 Statut Membre Dernière intervention 26 août 2009 1
21 janv. 2009 à 16:55
j'ai fait cela :
MemoryStream s = new MemoryStream(item.Picture);

item.Picture c'est le tableau de byte de mon image, je l'est récupérer du table item et du champs picture qui est de type image
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
laymouna98 Messages postés 71 Date d'inscription mardi 4 novembre 2008 Statut Membre Dernière intervention 26 août 2009 1
21 janv. 2009 à 16:57
salut à tous
0
laymouna98 Messages postés 71 Date d'inscription mardi 4 novembre 2008 Statut Membre Dernière intervention 26 août 2009 1
21 janv. 2009 à 17:17
bon j'ai insérer d'autre type de données comme varcher, int etc ca va ca marche et je peut lire les données transférer de l'autre table mais pour l'image je ne peut que récupérer un tableau de byte.
0
laymouna98 Messages postés 71 Date d'inscription mardi 4 novembre 2008 Statut Membre Dernière intervention 26 août 2009 1
21 janv. 2009 à 17:42
tu ma dit
 si ton (pseudo) code est le suivant, cest normal que ca plante, a cause d'un bug dans le framework :

void GetImage()
{
MemoryStream ms = new MemoryStream();
ms.Write(MonImageSousFormeDeTableauDeByte);
Image g = Image.FromStream(ms);
ms.Close();
}
mais c'est quoi la diférence entre ca et la première solution?
0
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
22 janv. 2009 à 09:19
oups, je me suis planté dans le code, je voulais mettre :

void GetImage()
{
MemoryStream ms = new MemoryStream();
ms.Write(MonImageSousFormeDeTableauDeByte);
Image g = Image.FromStream(ms);
MethodQuiUtiliseLImage();
ms.Close();
}

La différence cest dutiliser l'image AVANT de fermer le stream
0