2009-07-28 7 views
0

J'essaie de redimensionner les images téléchargées. D'après ce que j'ai trouvé en ligne, la façon de faire est de créer une nouvelle image de la taille que vous voulez et ensuite utiliser Graphics pour dessiner l'image à une image plus petite. Le semble fonctionner pour chaque image qui est téléchargée, sauf pour les images d'un appareil photo Nikon D90. Chaque fois que je tente de télécharger et de redimensionner une de ces images, j'obtiens une exception OutOfMemoryException à la ligne ci-dessous. Quelqu'un peut-il me dire ce que je fais mal.DrawImage provoquant OutOfMemoryException

'Create the new image as a blank bitmap 
Dim resized As Image = New Bitmap(newWidth, newHeight) 

'Create a new graphics object from the new image 
Dim g As Graphics = Graphics.FromImage(resized) 

'Resize graphics object to fit onto the resized image 
g.DrawImage(originalImage, New Rectangle(0, 0, resized.Width, resized.Height)) <-- Exception 

g.Dispose() 

Répondre

2

Comment chargez-vous l'image? System.Drawing.Image.FromFile? Selon le .Net Developer Center, cela renvoie OutOfMemoryException si le fichier image est endommagé ou dans un format GDI + ne reconnaît pas. Pouvez-vous ouvrir l'image dans un programme d'édition d'image comme Paint.Net?

Si c'est le cas, enregistrez-le au format JPEG ou quelque chose et essayez d'ouvrir le programme enregistré dans votre application. Si cela corrige, l'image d'origine a une sorte de corruption ou de format qu'un éditeur d'image peut gérer mais DrawImage ne peut pas. Vous devrez passer les images brisées à travers un éditeur d'image pour les réparer. Vous devrez trouver une application de retouche d'image avec une interface de ligne de commande ou de script que vous pouvez appeler depuis votre application.

+0

J'utilise FromFile. J'ai la même erreur avec FromStream, mais je devine que la raison est la même. L'image s'ouvrira dans Paint.Net et si je la redimensionne dans Paint.Net et que je la télécharge ensuite, elle fonctionnera très bien. Cela semble être une étape inutile pour mon utilisateur final. Qu'est-ce qui est impliqué avec la solution BinaryReader? – BLeB

+0

En outre, l'exception se produit sur DrawImage pas FromFile – BLeB

+0

Essayez simplement l'ouverture de l'image dans Paint.Net et la réenregistrement. Vous ne voulez pas que l'utilisateur final fasse cela, vous devrez le faire depuis votre application. Alors que les documents DrawImage ne le disent pas, je suppose qu'il a le même problème que FromFile. –

0

Je pense que cela code fonctionne très bien si les variables redimensionnées et image sont correctement définies.

Avez-vous une taille ou un rectangle de taille zéro?

+0

C'est ce que je pensais au début, mais j'ai vérifié que la nouvelle largeur et hauteur de l'image ne sont pas nulles. Les autres images que j'ai téléchargées fonctionnent bien. – BLeB

Questions connexes