2009-11-01 2 views
0

J'ai ce code:nouvelle Bitmap OutOfMemoryException dans CF 2.0SP2

if (archivoBinario != null) 
{ 
    MemoryStream ms = new MemoryStream(archivoBinario); 
    Bitmap imagen = new Bitmap(ms); 
    PicBoxImagen.Image = imagen; 
} 

Il jette un System.OutOfMemoryException lorsqu'un créer une nouvelle image de MemoryStream ms.

Remarque: archivoBinario est un tableau d'octets dont la taille est 9778 octets. Je pense que la taille de la mémoire n'est pas un problème. Aucun conseil?

Les images sont envoyées au périphérique par un service WCF et stockées dans une base de données SQL Server CE 3.1. Peut-être qu'il peut se produire un problème lors de l'envoi d'image.

J'ai comparer les octets représentant l'image stockée dans SQL Server 2005 et l'image stockée dans SQL Server CE et sont les mêmes.

Merci!

Répondre

1

La classe Image renvoie OOM pour à peu près n'importe quoi, y compris le format non valide. Pour vérifier vos bases, assurez-vous que c'est une image valide. Enregistrez ces 9778 octets dans un fichier et essayez de l'afficher (sur CF et/ou un PC normal).

Mais il est possible qu'une image compressée de 9 ko fasse énormément sauter, ce qui pourrait être un vrai MOO.

0

La création d'une image lancera parfois un OutOfMemoryException pour les ressources autres que la mémoire (ce qui est assez confus).

Est-il possible que vous ne disposiez pas des handles Windows Forms?

L'autre possibilité est que vous avez vraiment sont court de mémoire - par exemple, un petit fichier pourrait encore représenter une image énorme (par exemple si c'est d'une seule couleur). Si Windows essaie de créer une représentation pixel par pixel en mémoire de l'image, cela peut afficher les mêmes symptômes. Quelle est la taille de l'image en termes de pixels?

+0

J'ai ajouté plus de détails à ma question. – VansFannel

+1

Vous n'avez toujours pas dit quelle est la taille de l'image en termes de pixels au lieu d'octets. Vous devez également vérifier (par exemple avec MD5) que vous l'avez correctement saisi dans la base de données. –

+0

J'ai enregistré l'image et je ne peux pas l'ouvrir. – VansFannel

1

Vous devez appel Dispose sur PicBoxImagen.Image s'il n'est pas null avant d'affecter une nouvelle image. Si vous n'avez pas de fuite. Voir this blog entry pour une explication plus détaillée sur pourquoi.

+0

J'ai ajouté plus de détails à ma question. – VansFannel