2009-05-20 10 views
0
byte[] imageData = null; 
long byteSize = 0; 
byteSize = _reader.GetBytes(_reader.GetOrdinal(sFieldName), 0, null, 0, 0); 

imageData = new byte[byteSize]; 
long bytesread = 0; 
int curpos = 0, chunkSize = 500; 
while (bytesread < byteSize) 
{ 
    // chunkSize is an arbitrary application defined value 
    bytesread += _reader.GetBytes(_reader.GetOrdinal(sFieldName), curpos, imageData, curpos, chunkSize); 
    curpos += chunkSize; 
} 

byte[] imgData = imageData; 

MemoryStream ms = new MemoryStream(imgData); 
Image oImage = Image.FromStream((Stream)ms); 
return oImage; 

code crée problème lorsque "Image oImage = Image.FromStream((Stream)ms);" ligne exécute ..... Cette ligne affiche le message "Parameter is not valid" ....... Pourquoi il se produit? Aidez moi. Je veux récupérer l'image de la base de données .... Je travaille sur la fenêtre C# vs05 ..... Quelqu'un peut-il m'aider? octet [] contient une valeur. Tout fonctionne bien, juste le problème se produit lorsque cette ligne s'exécute.image Retrieve en utilisant C#

+0

Demandez à votre vérifié que le tableau d'octets ne en effet contenir des données? –

Répondre

1

Une simple instruction if devrait résoudre votre problème avant de créer le flux de mémoire

if (imageData.Length != 0) 
{ 
    MemoryStream ms = new MemoryStream(imageData); 
    Image oImage = Image.FromStream((Stream)ms); 
    return oImage; 
} 

return null; 
0

Je ne peux pas vraiment repérer les erreurs dans ce code (autre que le MemoryStream ne sont pas disposés, et que ce n'est pas nécessaire de jeter à Stream lors du passage à la méthode Image.FromStream, mais ceux qui ne devraient pas causer votre erreur). Je ferais ce qui suit afin d'essayer de trouver l'erreur:

  • écrire les données d'octets dans un fichier et essayez d'ouvrir l'image dans un programme graphique (pour vérifier que les données d'octet ne représente en effet une image valide). Ma conjecture est que cela échouerait.
  • Vérifiez le code qui écrit les données à la base de données (peut-être effectuer le même tour que dans le point précédent, écrire dans un fichier et essayez d'ouvrir le fichier)
Questions connexes