将varbinary转换为图像

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

首先,我在我的服务中从我的数据库中获取Binary。

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; } 

然后我尝试使用StackOverflow上的代码将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.EditAfbeeldingServiceReference.Binary’的第一个参数可以找到(您是否缺少using指令或程序集引用?)

出于一些奇怪的原因,我不能使用’普通’二进制文件,它总是告诉我使用OndernemersAward.EditAfbeeldingServiceReference.Binary这是我的ServiceReference,你可以看到。

怎么解决这个问题?

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; } 

这里发生的是编译器认为Binary是您的命名空间OndernemersAward.EditAfbeeldingServiceReference一个类。

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

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

您可能在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; }