《c#bitmap占用资源不释放解决方案》由会员分享,可在线阅读,更多相关《c#bitmap占用资源不释放解决方案(2页珍藏版)》请在金锄头文库上搜索。
1、 / / 缩小图片 / / 源图文件名(绝对路径) / 目标宽度(允许的最大宽度) / 新图片质量(1-100) public void ResizePic(string strPath, int newWidth, int quality) Bitmap bmOld, bmNew; try /读取原图片 bmOld = new Bitmap(strPath); /为了解决Bitmap不释放资源问题,先不同的名称保存图片,缩放完后把临时文件删除 string tempPath = strPath.Replace(., _temp.); int oldWidth = bmOld.Width; i
2、nt oldHeight = bmOld.Height; int newHeight = (int)(double)newWidth / oldWidth * oldHeight); if (oldWidth newWidth) newWidth = oldWidth; newHeight = oldHeight; /建立新Bitmap用于缩放图片 bmNew = new Bitmap(bmOld, newWidth, newHeight); /保存缩放后的图片 bmNew.Save(tempPath); bmOld.Dispose(); bmNew.Dispose(); /获取图片Encod
3、er信息 ImageCodecInfo codecs = ImageCodecInfo.GetImageEncoders(); ImageCodecInfo ici = null; foreach (ImageCodecInfo codec in codecs) if (codec.MimeType = image/jpeg) ici = codec; EncoderParameters ep = new EncoderParameters(); /给定的参数quality ep.Param0 = new EncoderParameter(Encoder.Quality, (long)quality); /从临时文件中读取图片 Image img = Image.FromFile(tempPath); /以给定的参数保存图片 img.Save(strPath, ici, ep); img.Dispose(); /最后删除临时图片 File.Delete(tempPath); catch (Exception ex) new Database().SysLog(ex, PicStore.ResizePic( + strPath + , + newWidth + , + quality + ,); finally bmOld = null; bmNew = null;