2013-04-09 1 views
0

원본 비트 맵에서 새 CroppedImage를 만들어 WPF 응용 프로그램에 자른 이미지를 표시합니다. 그러나 우리가 응용 프로그램 메모리를 볼 때 원래의 이미지를 표시하는 것처럼 자른 이미지를 표시하는 것과 동일합니다. CroppedImage가 원래의 비트 맵에 대한 참조를 유지하기 때문에 이것은별로 이상하지 않습니다. 하지만 원래 비트 맵을 참조하지 않고 새 비트 맵 이미지로 자른 이미지를 만드는 것이 어플리 방식 메모리를 줄이는 방법일까요?C# WPF에서 자른 이미지의 응용 프로그램 메모리 줄이기

이렇게하는 방법에 대한 몇 가지 코드는 매우 높이 평가 될 것입니다.

도움 주셔서 감사합니다.

public class TheImage : ViewModelBase 
{ 
    public BitmapSource CroppedImage { get; private set; } 

    public TheImage(byte[] imageData) 
    { 
     var bitmapImage = CreateBitmapSource(imageData); 
     var croppingRectangle = CalculateCropRectangle(bitmapImage.PixelWidth, bitmapImage.PixelHeight); 

     CroppedImage = new CroppedBitmap(bitmapImage, croppingRectangle); 

    } 

    private static BitmapImage CreateBitmapSource(byte[] imageData) 
    { 
     var bitmapImage = new BitmapImage(); 
     bitmapImage.BeginInit(); 
     bitmapImage.StreamSource = new MemoryStream(imageData); 
     bitmapImage.EndInit(); 
     return bitmapImage; 
    } 

    private static Int32Rect CalculateCropRectangle(int pixelWidth, int pixelHeight) 
    { 
     int width = 256; 
     int height = 256; 

     int x = (pixelWidth - width)/2; 
     int y = (pixelHeight - height)/2; 

     return new Int32Rect(x, y, width, height); 
    } 
} 
+0

* 어떻게 * 당신이 만든 CroppedImage에 따라 다릅니다. 여기에 몇 가지 코드를 입력하십시오. – Tigran

+0

자, 질문을 편집하고 코드를 추가했습니다. – exkoria

답변

1

당신이 자른 이미지는 이미지에 대한 참조를 conatins 말 : 여기

[편집]

은 자른 이미지를 만들기위한 코드입니다. 이로 인해 이미지가 메모리에 보존됩니다.

당신은 3 개 가지 옵션

1 :

3 자른 이미지에서 이미지의 참조를 제거합니다 :에 대한 참조를 변경는 방법

2를 처분 할 경우 수동으로 실시 원본 이미지를 해제 이전 이미지를 WeakReference