2009-07-28 70 views
0

我正在尝试重新上传图片大小。从我在网上找到的内容来看,实现这一点的方法是创建一个您想要的大小的新图像,然后使用图形将图像绘制为较小的图像。似乎适用于上传的所有图像,但尼康D90相机的图像除外。每当我尝试上传并重新设置这些图像的大小时,我都会在下面显示的行中看到OutOfMemoryException。任何人都可以告诉我我做错了什么。DrawImage导致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() 

回答

2

你是如何载入图像的? System.Drawing.Image.FromFile?根据.Net Developer Center,如果图像文件损坏或格式GDI +无法识别,则会抛出OutOfMemoryException。

你可以在像Paint.Net这样的图像编辑程序中打开图像吗?如果是这样,请将其保存为JPEG或其他内容,并尝试在应用程序中打开保存的程序。

如果解决了这个问题,原始图像会有一些图像编辑器可以处理的损坏或格式,但是DrawImage不能。您将不得不通过图像编辑器传递破损的图像来修复它们。您必须找到一个图像编辑应用程序,其中包含可从您的应用程序调用的命令行或脚本界面。

+0

我正在使用FromFile。我得到了与FromStream相同的错误,但我猜测原因是一样的。图像将在Paint.Net中打开,如果我在Paint.Net中重新调整大小,然后上传它们,它们就可以正常工作。这对我的最终用户来说似乎是一个不必要的步骤。 BinaryReader解决方案涉及什么? – BLeB 2009-07-29 17:27:24

0

我认为这段代码将正常工作,如果变量调整大小和 图像设置正确。

你有一个零大小的想法或矩形?

+0

这是我第一次想到的,但我已经证实,新的图像宽度和高度不是零。我已上传的其他图像正常工作。 – BLeB 2009-07-28 04:08:14