Image 在WinMobile和.NET CF中调整和保存图像的大小会引发OutOfMemoryException

Image 在WinMobile和.NET CF中调整和保存图像的大小会引发OutOfMemoryException,image,windows-mobile,compact-framework,Image,Windows Mobile,Compact Framework,我有一个WinMobile应用程序,允许用户用相机拍摄照片,然后用于各种事情。照片可以拍摄为1600x1200、800x600或640x480,但必须始终将其大小调整为400px,以获得最长的尺寸(当然,另一个是成比例的)。代码如下: private void LoadImage(string path) { Image tmpPhoto = new Bitmap(path); // calculate new bitmap size... double width =

我有一个WinMobile应用程序,允许用户用相机拍摄照片,然后用于各种事情。照片可以拍摄为1600x1200、800x600或640x480,但必须始终将其大小调整为400px,以获得最长的尺寸(当然,另一个是成比例的)。代码如下:

private void LoadImage(string path)
{
    Image tmpPhoto = new Bitmap(path);

    // calculate new bitmap size...
    double width = ...
    double height = ...

   // draw new bitmap
   Image photo = new Bitmap(width, height, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
   using (Graphics g = Graphics.FromImage(photo))
   {
       g.FillRectangle(new SolidBrush(Color.White), new Rectangle(0, 0, photo.Width, photo.Height));
       int srcX = (int)((double)(tmpPhoto.Width - width) / 2d);
       int srcY = (int)((double)(tmpPhoto.Height - height) / 2d);
       g.DrawImage(tmpPhoto, new Rectangle(0, 0, photo.Width, photo.Height), new Rectangle(srcX, srcY, photo.Width, photo.Height), GraphicsUnit.Pixel);
   }
   tmpPhoto.Dispose();
   // save new image and dispose
   photo.Save(Path.Combine(config.TempPath, config.TempPhotoFileName), System.Drawing.Imaging.ImageFormat.Jpeg);
   photo.Dispose();
}
现在的问题是,应用程序在photo.Save调用中中断,并出现OutOfMemoryException。我也不知道为什么,因为我会尽快处理tempPhoto(相机的原始照片),我也会处理图形obj。为什么会发生这种情况?对我来说,不可能用相机拍摄照片,调整大小/保存它,而不让它崩溃:(我应该为这样一个简单的事情重新安排C++吗?
谢谢。

您是否查看了每一步的内存使用情况,以准确了解您使用最多的位置?您省略了宽度和高度的计算,但假设它们是正确的,那么最终的结果是,位图数据本身需要400x300x3(24位)=360k,这并不是太大


我的猜测是,即使您正在调用Dispose,资源也没有得到充分利用,特别是如果您多次调用此方法。CF在位图中的行为方式出乎意料…

您对大小和内存占用的看法是正确的…那么,有什么解决方案吗?:)您看过博客了吗?“解决方案”可能是在Dispose之后手动调用GC.Collect