将varbinary转换为图像

时间:2011-11-26 15:43:04

标签: c# silverlight

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

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

    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,正如你所看到的那样。

如何解决这个问题?

3 个答案:

答案 0 :(得分: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 :(得分:1)

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

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

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

答案 2 :(得分: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;
        }