如何在wpf应用程序中加载图像时缩小图像大小。
这是我上传图片的代码
if (ofg.FileName != null && ofg.FileName.Length > 0)
{
ofg.OpenFile();
FileStream fs1 = new FileStream(ofg.FileName, FileMode.Open, FileAccess.Read);
Byte[] imgByteArr = new byte[fs1.Length];
fs1.Read(imgByteArr, 0, Convert.ToInt32(fs1.Length));
fs1.Close();
BitmapImage biImg = new BitmapImage();
MemoryStream ms = new MemoryStream(imgByteArr);
biImg.BeginInit();
biImg.StreamSource = ms;
RenderOptions.SetBitmapScalingMode(biImg, BitmapScalingMode.LowQuality);
biImg.EndInit();
UserImage = biImg as ImageSource;
}
Plz帮助我缩小图像尺寸...
答案 0 :(得分:2)
如果没有将返回值分配给稍后关闭的Stream变量,请不要调用OpenFile
。否则,Stream永远不会关闭,从而产生内存泄漏。当您打开FileStream时,根本不需要调用OpenFile。
您可以通过避开MemoryStream并冻结BitmapImage来进一步减少内存消耗。
var biImg = new BitmapImage();
using (var fs = new FileStream(ofg.FileName, FileMode.Open, FileAccess.Read))
{
biImg.BeginInit();
biImg.CacheOption = BitmapCacheOption.OnLoad;
biImg.StreamSource = fs;
biImg.EndInit();
}
biImg.Freeze();
UserImage = biImg;
如果您还需要减少像素数,可以设置DecodePixelWidth或DecodePixelHeight(但如果要保留宽高比,则不能同时设置两者):
biImg.BeginInit();
biImg.CacheOption = BitmapCacheOption.OnLoad;
biImg.StreamSource = fs;
biImg.DecodePixelWidth = 200;
biImg.EndInit();