2010-05-21 2 views
1

MemoryStream은 10MB로 2MB의 비트 맵에서 생성되었으며 JPEG로 압축되었습니다. MemoryStream은 GUI의 경우 System.Windows.Controls.Image에 직접 배치 할 수 없으므로 다음 중간 코드를 사용하여 BitmapImage으로 다시 변환하고 결국 System.Windows.Controls.Image으로 변환합니다.BitmapSource의 MemoryStream, 메모리 사용량 줄이기가 필요합니다

제 질문은 BitmapImage에 저장할 때 메모리 할당이 2MB입니다. 예상 되나요? 메모리를 줄이는 방법이 있습니까?

약 300 개의 미리보기 이미지가 있으며이 변환에는 약 600MB가 소요되며 이는 매우 높습니다.

감사합니다.

답변

2

메모리를 줄일 수있는 방법이 있습니까?

예 : 이미지 자체에서 memorystream을 생성하지 말고 대신 이미지의 미리보기를 사용하십시오.

 private void button1_Click(object sender, EventArgs e) 
      { 
       Image.GetThumbnailImageAbort myCallback = new Image.GetThumbnailImageAbort(ThumbnailCallback); 
       Bitmap myBitmap = new Bitmap(@"C:\Documents and Settings\Sameh\My Documents\My Pictures\Picture\Picture 004.jpg"); //3664 x 2748 = 3.32 MB 
       Image myThumbnail = myBitmap.GetThumbnailImage(myBitmap.Width/100, myBitmap.Height/100 , myCallback, IntPtr.Zero); 
    //now use your thumbnail as you like 
       myThumbnail.Save(@"C:\Documents and Settings\Sameh\My Documents\My Pictures\Picture\Thumbnail 004.jpg"); 
       //the size of the saved image: 36 x 27 = 2.89 KB 
//you can create your memory stream from this thumbnail now 
      } 

      public bool ThumbnailCallback() 
      { 
       return false; 
      } 

그리고 솔루션에 대해 here is more details : 여기

그것을 수행하는 방법의 샘플 코드입니다.

+0

Samesh, 답장을 보내 주셔서 감사합니다. GetThumbnailImage()에 익숙하지 않습니다. 그것을 사용하는 데 어떤 단점이 있습니까? 전체 이미지를 볼 수 있습니까? – codematrix

+0

내가 볼 수있는 유일한 단점은 항상 false를 반환하는 콜백 메서드를 사용한다는 것입니다! 그러나 이것은 마이크로 소프트에 의해 주어진 샘플이 작동하는 방법입니다 !!! 자세한 내용은 제공된 링크를 참조하십시오. 전체 이미지의 경우 : 이미지의 ** 미리보기 이미지 **가 표시됩니다. 즉 ** 전체 ** 이미지의 축소 버전입니다. 제공된 링크의 비고 섹션을 읽으십시오. 중요합니다. –