WPF:MemoryStream占用大量内存

加内什

我正在使用MemoryStram将Bitmap转换为BitmapImage,当我检查CPU使用率时,它消耗了更多的内存。我想减少MemoryStream对象的内存消耗。我也在Using语句中使用了它,结果与前面提到的相同。我在打我的代码片段,任何人都可以帮助我找到解决方案或任何其他可用的替代方法。代码:

public static BitmapImage ConvertBitmapImage(this Bitmap bitmap)
{
    using (MemoryStream ms = new MemoryStream())
    {
        bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
        System.Windows.Media.Imaging.BitmapImage bImg = new System.Windows.Media.Imaging.BitmapImage();
        bImg.BeginInit();
        bImg.StreamSource = new MemoryStream(ms.ToArray());
        bImg.EndInit();
        return bImg;
    }
}

要么

public static BitmapImage ConvertBitmapImage(this Bitmap bitmap)
{
            BitmapImage bi = new BitmapImage();
            bi.BeginInit();
            MemoryStream ms = new MemoryStream();
            bitmap.Save(ms, ImageFormat.Bmp);
            ms.Seek(0, SeekOrigin.Begin);
            bi.StreamSource = ms;
            bi.EndInit();
            return bi;
}
克莱门斯

不需要第二个MemoryStream。

在解码BitmapImage之前,只需倒回Bitmap编码到的那个,然后设置BitmapCacheOption.OnLoad以确保可以在以下时间后关闭流EndInit()

public static BitmapImage ConvertBitmapImage(this System.Drawing.Bitmap bitmap)
{
    var bImg = new BitmapImage();

    using (var ms = new MemoryStream())
    {
        bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
        ms.Position = 0; // here, alternatively use ms.Seek(0, SeekOrigin.Begin);

        bImg.BeginInit();
        bImg.CacheOption = BitmapCacheOption.OnLoad; // and here
        bImg.StreamSource = ms;
        bImg.EndInit();
    }

    return bImg;
}

请注意,还有其他在位图和BitmapImage之间转换的方式,例如:将位图快速转换为BitmapSource wpf

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章