2011-04-07 77 views
0

我正在運行多線程圖像壓縮過程。原始文件是1280x 960高分辨率PNG文件,大約1800KB。我需要壓縮到< 70KB JPEG文件。當我處理幾輛車時,這個過程運行良好。當我處理超過20輛車時,我開始出現內存不足的錯誤。這是代碼。圖像壓縮過程出現內存不足錯誤

private static ImageCodecInfo GetEncoderInfo(String mimeType) int j; ImageCodecInfo []編碼器; encoders = ImageCodecInfo.GetImageEncoders(); (j = 0; j < encoders.Length; ++ j) if(encoders [j] .MimeType == mimeType) return encoders [j]; } return null; }

public static void SaveAsJpg(string inFilePath = null, string outputFileName = null, long compression = 70, long quality = 70) 
    { 
     System.Drawing.Image orgimage = System.Drawing.Image.FromFile(inFilePath); 
     var imgIn = new Bitmap(orgimage); 
     var imgOut = new Bitmap(imgIn.Width, imgIn.Height); 

     Graphics g = Graphics.FromImage(imgOut); 
     g.Clear(Color.White); 
     g.DrawImage(imgIn, 0, 0, imgIn.Width, imgIn.Height); 

     EncoderParameters encoding = new EncoderParameters(2); 
     encoding.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Compression, compression); 
     encoding.Param[1] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, quality); 
     ImageCodecInfo myImageCodecInfo = GetEncoderInfo("image/jpeg"); 

     imgOut.Save(outputFileName, myImageCodecInfo, encoding); 
    } 

在此先感謝您的任何建議。

回答

0

我認爲你需要在離開方法之前處理圖形對象。

g.Dispose(); 
orgiImage.Dispose(); 
imgIn.Dispose(); 
imgOut.Dispose(); 

Disposing System.drawing objects

+0

感謝您的輸入。我完全忘記了處理圖形對象。 – Amy 2011-04-07 19:53:59

相關問題