2011-09-21 5 views
1

로 비트 맵 이미지를 얻는 방법이 내가당신이 WPF 목록보기

<GridViewColumn Header="Status" > 
    <GridViewColumn.CellTemplate> 
     <DataTemplate> 
      <StackPanel Orientation="Horizontal"> 
       <Image Source="{Binding Image}" Width="22" Height="22"/> 
      </StackPanel> 
     </DataTemplate> 
    </GridViewColumn.CellTemplate> 
</GridViewColumn> 

이미지가 나는 Namespace.Resources에서 점점 오전 System.Drawing.Bitmap의 이미지가 것입니다.

내가 열심히 시도해도 이미지가 표시되지 않습니다.

답변

3

System.Drawing.Bitmap에서 WPF가 이미지 용으로 사용하는 ImageSource로 변환해야합니다. Imaging.CreateBitmapSourceFromHBitmap :

// Include, in your class or elsewhere: 
[System.Runtime.InteropServices.DllImport("gdi32.dll")] 
private static extern bool DeleteObject(IntPtr hObject); 

Bitmap image = LoadYourBitmap(); 

IntPtr hbitmap = image.GetHbitmap(); 
try 
{ 
    var bitmapSource = Imaging.CreateBitmapSourceFromHBitmap(
     hbitmap, IntPtr.Zero, Int32Rect.Empty, 
     Imaging.BitmapSizeOptions.FromEmptyOptions()); 
} 
finally 
{ 
    // Clean up the bitmap data 
    DeleteObject(hbitmap); 
} 
+0

감사합니다. – Fatal510

+0

그래서 저는 Bitmap을 BitmapSource로 변환하는 다른 방법을 사용하여 MemoryStream에서 초기화했습니다 (이미지 데이터를 Base64 인코딩 된 문자열로 얻음). . 몇 가지 테스트를 실행 한 후에이 방법은 내 것보다 훨씬 빠릅니다 (일관되게 100 샘플을 사용하면 70 % 더 빠름). 그러나이 메서드를 호출하면 메모리 사용량이 계속 증가합니다. 가능한 한 빨리 모든 것이 정리되었는지 확인하기 위해 약간의 시간을 보냈기 때문에이 방법은 내 방법으로는 발생하지 않습니다 (처음에는 메모리 문제가있었습니다). 왜 그런지 아십니까? –

+0

나는 그것을 조사 할 것이므로, 어느 쪽이든 감사한다. 나에게 한눈에 알 수는 없지만 320x240 이미지를 100 번 변환 한 후 내 작업 세트에서 ~ 30MB의 점프를 볼 수 있습니다. –