2011-11-02 82 views
0

我從客戶端獲取圖像將其轉換爲byte []並將其發送到服務器。並將byte []轉換爲Base64String並插入到數據庫中。從silverlight中以字節[]的形式顯示數據庫中的圖像

而且我倒轉顯示圖像。但我不能看到圖像。爲什麼???

//Convert to byte array 
public static byte[] ImageToByteArray(WriteableBitmap bitmap) 

{ 
      int[] p = bitmap.Pixels; 
      int len = p.Length << 2; 
      byte[] result = new byte[len]; 
      Buffer.BlockCopy(p, 0, result, 0, len); 
      return result; 
} 

//Converter 
public object Convert(object value, Type targetType, object parameter,System.Globalization.CultureInfo culture) 
     { 
      if (value == null) 
      { 
       return null; 
      } 

      BitmapImage image = new BitmapImage(); 

      MemoryStream stream = new MemoryStream(); 
      stream.Write((byte[])value, 0, ((byte[])value).Length); 
      image.SetSource(stream); 


      return image; 
     } 

//While writing to database 
else if (value.GetType() == typeof(byte[])) 
      { 
       return "'" + Convert.ToBase64String((byte[])value) + "'"; 
      } 

else if ((type == typeof(byte[]))) 
      { 
       return Convert.FromBase64String((string)value); 
      } 

回答

0

我使用了BinaryReader並解決了問題。

我的問題是沒有讀取正確的圖像。使用BinaryReader讀取圖像並解決問題。

   BinaryReader reader = new BinaryReader(fileInfo.OpenRead()); 

       byte[] tempImage = new byte[reader.BaseStream.Length]; 

       reader.Read(tempImage, 0, tempImage.Length); 
1

我有以下代碼爲一個字節數組直接轉換爲圖像:

var bitmapImage = new BitmapImage(); 
bitmapImage.SetSource(new MemoryStream(imageData)); 
newImage.Source = bitmapImage; 

所以只要轉換和從Base64String工作,這應該是你所需要的。

另外,您不需要轉換爲Base64String來存儲在數據庫中。您只需要將列類型設置爲image(假設您正在使用MS SQL Server)

+0

克里斯 - 嗨。我使用MS-SQL,但我通過反射和查詢對象使用元數據映射。在這個領域模型中,我不能將圖像數據添加爲圖像。而我卻無法讓事情奏效。 – turgut

+0

@turgut - 我認爲你需要解決問題。是圖像轉換爲字符串失敗嗎?或者也許是字符串在數據庫中的存儲?驗證每一步的數據。從byte [] - > string - > byte []進行轉換,並檢查結果是否與輸入相同。 – ChrisF

+0

轉換前和轉換後匹配的數據令人驚訝。 – turgut

1
public class Base64StringToImageConverter : IValueConverter { 
     public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { 
      if (!(value is string)) return DependencyProperty.UnsetValue; 

      BitmapImage bitmapImage = new BitmapImage(); 
      bitmapImage.SetSource(new MemoryStream(System.Convert.FromBase64String((string)value))); 
      return bitmapImage; 
     } 

     public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { 
      // TODO: Implement this method 
      throw new NotImplementedException(); 
     } 
    } 
相關問題