2011-11-26 134 views
2

我设法将Image转换为varbinary并将其存储在我的数据库中。我一直在尝试将varbinary转换为Image,但我在这里遇到了一些麻烦。将varbinary转换为图像

首先我从服务中的数据库中获取二进制文件。

public Binary getAfbeelding(int id) 
    { 

     var query = (from p in dc.Afbeeldings 
        where p.id == id 
        select p.source).Single(); 

     Binary source = query; 
     return source; 
    } 

然后我尝试将VARBINARY转换为图像,用在计算器上找到代码:

public static string convertToImage(Binary source) 
    { 
     byte[] b = source.ToArray(); 
     MemoryStream ms = new MemoryStream(b); 
     Image img = Image.FromStream(ms); 
     return img.Source.ToString(); 
    } 

我遇到了麻烦调用之前new MemoryStream

“OndernemersAward .EditAfbeeldingServiceReference.Binary'不包含'ToArray'的定义,并且没有扩展方法'ToArray'接受类型为 的第一个参数'OndernemersAward.EditAfbeeldingService Reference.Binary”可以找到(是否缺少using指令或程序集引用?)

出于某种奇怪的原因,我不能用‘正常’的二进制,它总是告诉我用OndernemersAward.EditAfbeeldingServiceReference.Binary这是你可以看到我的ServiceReference。

这怎么解决?

回答

6

1)添加引用到你的项目System.Data.Linq.dll

2),然后试试这个:

public static Image ConvertToImage(System.Data.Linq.Binary iBinary) 
    { 
     var arrayBinary = iBinary.ToArray(); 
     Image rImage = null; 

     using (MemoryStream ms = new MemoryStream(arrayBinary)) 
     { 
      rImage = Image.FromStream(ms); 
     } 
     return rImage; 
    } 
1

这里发生了什么事情,编译器认为Binary是您的命名空间OndernemersAward.EditAfbeeldingServiceReference中的一个类。

您在convertToImage中的代码预计名为source的参数的类型为System.Data.Linq.Binary。您在StackOverflow上找到的代码假定是数据类型。

如果您在自己的名称空间中有一个类,请将其重命名为其他名称以避免此命名重复。如果这不是一个好的选择,那么在使用2 Binary类时,请考虑在代码中显式使用完全限定名称空间。

+0

奇怪的是,我不没有一个叫Binary的类。 我设法通过将二进制转换为我的服务中的一个字节[]来解决。 'byte [] source = query.ToArray(); return source;' 但是现在当试图转换图像时,似乎在silverlight中,图像没有'.FromStream'。 (我也不能使用'System.Drawing') – Schoof

0

可能您在OndernemersAward.EditAfbeeldingServiceReference命名空间中创建了Binary类。

添加

System.Data.Linq.dll

库您参考。然后写:

using System.Data.Linq; 
.... 

public static Image ConvertToImage(Binary iBinary) 
     { 
      var arrayBinary = iBinary.ToArray(); 
      Image rImage = null; 

      using (MemoryStream ms = new MemoryStream(arrayBinary)) 
      { 
       rImage = Image.FromStream(ms); 
      } 
      return rImage; 
     } 
+0

我试过引用'System.Data.Linq',但我似乎无法在我的xaml.cs文件中这样做。 '名称空间'System'中不存在类型或名称空间名称'Data' – Schoof