我有一个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();
}
现在的问题是应用程序在照片中中断。保存调用,但出现OutOfMemoryException。我也不知道为什么,因为我会尽快处理tempphoto(和相机里的原始照片一起),我也会处理图形obj。为什么会这样?在我看来,不可能用相机拍摄照片并调整大小/保存它而不让它崩溃:(我是否应该为这样一个简单的事情重新安排C++?)
谢谢。