2014-02-21 137 views
1

byte[]轉換爲Bitmap有很多示例或源代碼,但我不確定如何在我的視圖xaml上顯示或綁定。在XAML上顯示圖像的WPF C#

我的轉換如下功能:

private Bitmap ConvertByteToBitmap(byte[] bmpByte) 
{ 
    ImageConverter converter = new ImageConverter(); 
    return (Bitmap)converter.ConvertFrom(bmpByte); 
} 

說我有10個用戶和用戶對象具有相片變量這是byte[]類型。
現在我想知道如何將已轉換的byte[]綁定到image標籤並將其顯示在xaml的網格中?我是否應該創建另一個變量來存儲轉換後的圖像結果以便在xaml處進行綁定?

例如:

UserObject
- 名稱:簡
- 照片:0x0023347dgas83 .....


- 名稱:艾薩克
- 照片:0x1023347ddffeas83 .....

通常在textbox綁定文本像

<TextBox Text="{Binding [someviewmodel].UserObject.Name}"/> 

什麼位圖圖像結合的方式嗎?

+0

有一個類型的屬性'BitmapImage'和'BitmapSource'在你的視圖模型,並用結合。 –

+0

@RohitVats:所以我需要轉換每個'byte []'並將它們存儲到它們各自對象的變量中? –

+0

如果是這樣,請勿創建重複副本。而是寫一個轉換器,將'byte []'轉換爲'BitmapImage'。您可以參考[這裏]的轉換器代碼(http://stackoverflow.com/a/687161/632337)。 –

回答

0

您必須創建一個新變量。 如果你知道圖片的尺寸,你可以試試這個:

Image image; 
BitmapSource bitmapSource = BitmapSource.Create(width, height, dpiWidth, dpiHeight,PixelFormats.Brg32, null, byteArrayIn, width * PixelFormats.Brg32.BitsPerPixel/8); 
image.Source = bitmapSource; 

BitmapSource.Create()

你也可以試試這個:

private BitmapImage CreateImage(byte[] imageData) 
    { 
     if (imageData == null || imageData.Length == 0) return null; 
     var image = new BitmapImage(); 
     using (var stream = new MemoryStream(imageData)) 
     { 
      stream.Position = 0; 
      image.BeginInit(); 
      image.CreateOptions = BitmapCreateOptions.PreservePixelFormat; 
      image.CacheOption = BitmapCacheOption.OnLoad; 
      image.UriSource = null; 
      image.StreamSource = stream; 
      image.EndInit(); 
     } 
     image.Freeze(); 
     return image; 
    } 
+0

所以我需要在我的** UserObject **下創建另一個變量來存儲轉換後的結果? –

+0

是的,類型爲'Image'。 – Loetn

1

這工作:

public class MyItem 
{ 
    private readonly byte[] _image; 

    ... 

    public byte[] Image { get { return _image; } } 

} 

然後以XAML爲例:

<ListBox ItemsSource="{Binding Items}"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <Image Source="{Binding Image}"/> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

ImageSourceConverter做所有的轉換爲你