2013-02-24 79 views
1

接收到錯誤'無法轉換'System.Data.Linq.Binary'類型的對象以鍵入'System 。字節[]'。'在視覺工作室。我有圖像存儲在SQL Server數據庫,我以樹形圖格式顯示。我可以打開dbml設計器並將所有System.Data.Linq.Binary更改爲System.Byte,但圖像模糊不清。有什麼想法嗎?無法投入'System.Data.Linq.Binary'類型的對象以鍵入'System.Byte []'

下面是代碼:

public class ImageBytesConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, 
     System.Globalization.CultureInfo culture) 
    { 
     BitmapImage bitmap = new BitmapImage(); 

     if (value != null) 
     { 
      byte[] photo = (byte[])value; 
      MemoryStream stream = new MemoryStream(); 


      int offset = 78; 
      stream.Write(photo, offset, photo.Length - offset); 

      bitmap.BeginInit(); 
      bitmap.StreamSource = stream; 
      bitmap.EndInit(); 
     } 

     return bitmap; 
    } 
} 
+0

發佈一些代碼可能會幫助我們。 – 2013-02-24 23:32:33

+0

圖標大小錯誤可能會導致圖標模糊。 – Dialecticus 2013-02-24 23:42:47

+0

dup http://stackoverflow.com/questions/14029967/convert-system-data-linq-binary-to-byte – Joe 2014-10-30 16:39:29

回答

2

你將不得不使用ToArray方法從Binary到獲得byte[]值。

public class BinaryToByteArrayConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     if (value != null && value is System.Data.Linq.Binary) 
     { 
      byte[] array = (value as System.Data.Linq.Binary).ToArray(); 
      BitmapImage bitmap = new BitmapImage(); 

      using (MemoryStream stream = new MemoryStream()) 
      { 
       int offset = 78; 
       stream.Write(array, offset, array.Length - offset); 
       bitmap.BeginInit(); 
       bitmap.StreamSource = stream; 
       bitmap.EndInit(); 
      } 
      return bitmap; 
     } 
     return null; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return null; 
    } 
} 
1

使用System.Data.Linq.Binary.ToArray()

模糊性和模糊不太可能是由於字節的轉換,而是要控制你正在使用,以顯示它不對齊到像素網格,或者稍微調整大小,拉伸圖像並使其變大和模糊。確保圖像不拉伸,控制對齊像素網格SnapsToDevicePixels="True"

而且,這裏是一些幫助你的代碼:

public class ImageBytesConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, 
     System.Globalization.CultureInfo culture) 
    { 
     BitmapImage bitmap = new BitmapImage(); 
     bitmap.CacheOption = BitmapCacheOption.OnLoad; 

     if (value != null) 
     { 
      byte[] photo = ((System.Data.Linq.Binary)value).ToArray(); 

      using(MemoryStream stream = new MemoryStream()) 
      { 
       int offset = 78; 
       stream.Write(photo, offset, photo.Length - offset); 

       bitmap.BeginInit(); 
       bitmap.StreamSource = stream; 
       bitmap.EndInit(); 
      } 

      return bitmap; 
     } 

     return null; 
    } 
} 
+0

不是所有的代碼路徑都返回一個值public object convert – KeyboardFriendly 2013-02-25 00:00:33

+0

這應該是一個明顯的修復,我添加了它。 – codekaizen 2013-02-25 01:42:57

相關問題