2013-10-08 75 views
2

我將圖像作爲byte []數組存儲,因爲我無法將它們存儲爲BitmapImage。 ShotItem類將存儲在IsolatedStorage中的observableCollection中。Windows Phone 8 - 通過綁定將字節[]數組加載到XAML圖像中

namespace MyProject.Model 
{ 
    public class ShotItem : INotifyPropertyChanged, INotifyPropertyChanging 
    { 
     private byte[] _shotImageSource; 
     public byte[] ShotImageSource 
     { 
      get 
      { 
       return _shotImageSource; 
      } 
      set 
      { 
       NotifyPropertyChanging("ShotImageSource"); 

       _shotImageSource = value; 
       NotifyPropertyChanged("ShotImageSource"); 
      } 
     } 
     ... 
    } 
} 

在我的XAML文件,我有以下:

<Image Source="{Binding ShotImageSource}" Width="210" Height="158" Margin="12,0,235,0" VerticalAlignment="Top" /> 

可惜我不能將圖像作爲一個字節加載直入在XAML圖像容器。我不知何故需要將ShotImageSource byte []轉換爲BitmapImage。我加載了不少圖像,所以這也必須異步完成。

我試圖使用轉換器綁定,但我不確定如何讓它工作。任何幫助將不勝感激 :)。

+1

你需要有一個創建從字節數組中的BitmapSource綁定轉換器。如果字節數組包含編碼圖像(PNG或JPEG),則可以從中創建一個流並調用「BitmapSource.SetSourceAsync」。如果字節數組是一個原始像素緩衝區,您可以創建一個WriteableBitmap並將像素複製到其「PixelBuffer」中。 – Clemens

回答

8

下面是一個Converter代碼你byte[]BitmapImage,將轉換:

public class BytesToImageConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     if (value != null && value is byte[]) 
     { 
      byte[] bytes = value as byte[]; 
      MemoryStream stream = new MemoryStream(bytes); 
      BitmapImage image = new BitmapImage(); 

      image.SetSource(stream); 

      return image; 
     } 

     return null; 

    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 
+0

除了這個轉換器,你應該在XAML中指定它: Anthony

+0

如果你使用的是win8.1,它的全部都是異步的,所以內存流不再適用。解決方案在這裏http://www.chrispeerman.info/loading-images-from-byte-arrays-in-windows-8-store-apps-winrt/ –

相關問題