2016-04-27 22 views
3

MagickImageでメモリに圧縮しようとしています。しかし、それはあまりにも多くのメモリを消費します。 VSパフォーマンスツールでは、このメソッドを呼び出すたびに大量のメモリを消費します。それが存在すれば0Mbを取るべきでしょうか?C#でメモリリークが発生すると画像が圧縮される

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; 
        } 
       } 
      } 

     } 
    } 
+0

代わりに 'return image.ToBitmapSource()'を使用するとどうなりますか? – dlemstra

+0

@dlemstraこのような方法はありません – Xiaokun

+1

Magick.NETの最新バージョンを使用していますか?イメージはそのメソッドを持つ必要があります。おそらくあなたは.NET Coreバージョンを使用していますか? – dlemstra

答えて

0

イメージはピクセル単位でメモリに格納されるため、そのサイズに応じて多くのメモリを消費します。 サイズを指定すると、メモリが大幅に削減されます。

bitmap.DecodePizelWidth = 800; 
関連する問題