2010-10-07 63 views
0

我有一個控制檯應用程序,可以在保持寬高比的同時成功重新調整圖像大小。使用控制檯應用程序拋出「內存不足」的C#圖像操作異常

我現在需要裁剪圖像我使用的代碼如下:

using (var thumbnail = CropPicture(image, rectangle)) { 
    EncoderParameters encParams = new EncoderParameters(1); 
    encParams.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, (long)90); 

    thumbnail.Save(destination, GetImageCodecInfo(image.RawFormat), encParams); 
} 

public static Image CropPicture(Image source, Rectangle cropArea) { 
    using (var bitmap = new Bitmap(source)) { 
     return (Image)(bitmap.Clone(cropArea, source.PixelFormat)); 
    } 
} 

這似乎就行了

return (Image)(bitmap.Clone(cropArea, source.PixelFormat)); 

任何想法將是拋出內存溢出異常上?我認爲這是一個開放的文件不能100%確定。

回答

0

根據MSDN documentation, Bitmap.Clone(Rectangle, PixelFormat),如果第一個參數是「源位圖邊界之外」,則可以拋出OutOfMemoryException。

驗證第一個參數爲Bitmap.Clone;確保矩形完全在圖像的範圍內。

+0

感謝您的答覆,這個答案和其他幫助我解決了這個問題,得到所有圖像,包括臨時縮略圖...無限循環。這導致我的答案最終形象成爲15x15,矩形超出界限,歡呼:) – 2010-10-07 09:42:46

1

而不是返回使用內部的圖像爲什麼不在使用語句中返回它之前創建一個引用。

public static Image CropPicture(Image source, Rectangle cropArea) { 
    Bitmap retImg; 
    using (var bitmap = new Bitmap(source)) { 
     retImg = bitmap.Clone(cropArea, source.PixelFormat); 
    } 
    return (Image)regImg; 
} 

我不確定,但它看起來像位圖不會放置在您返回圖像之前。

相關問題