【发布时间】:2016-08-21 11:39:25
【问题描述】:
我尝试在内存中使用MagickImage 压缩ImageSource。但是它消耗了太多的内存。使用 VS 性能工具,每次调用此方法都会消耗大量内存。一旦存在,它应该需要 0Mb,对吧?
internal static System.Windows.Media.ImageSource compressImage(System.Windows.Media.ImageSource ims)
{
using (MemoryStream stream = new MemoryStream())
{
using (MemoryStream outS = new MemoryStream())
{
BitmapSource bs = ims as BitmapSource;
JpegBitmapEncoder encoder = new JpegBitmapEncoder();
BitmapFrame bf = BitmapFrame.Create(bs);
//encoder.Frames.Add(BitmapFrame.Create(image1.Source));
encoder.Frames.Add(bf);
encoder.Save(stream);
stream.Flush();
try
{
// Read first frame of gif image
using (MagickImage image = new MagickImage(stream))
{
image.Quality = 75;
image.Resize(new Percentage(0.65));
image.Density = new Density(200, DensityUnit.PixelsPerInch);
image.Write(outS);
}
stream.Close();
BitmapImage bitmap = new BitmapImage();
bitmap.BeginInit();
bitmap.CacheOption = BitmapCacheOption.OnLoad;
outS.Position = 0;
bitmap.StreamSource = outS;
//
bitmap.EndInit();
//bitmap.Freeze();
outS.Flush();
outS.Close();
ims = null;
return bitmap;
}
catch (Exception e)
{
return null;
}
}
}
}
}
【问题讨论】:
-
当你改用
return image.ToBitmapSource()会发生什么? -
@dlemstra 没有这样的方法
-
您使用的是最新版本的 Magick.NET 吗?图像应该具有该方法。也许您使用的是 .NET Core 版本?
-
我正在使用 Magick.NET magick.codeplex.com/wikipage?title=Convert%20image
标签: c# visual-studio memory-leaks imagemagick