c# - 如何在 C# 中从数据库检索时将 varBinary 转换为图像或视频

标签 c# .net linq linq-to-sql

我正在使用 Visual Studio 2010(桌面应用程序)并使用 LINQ to SQL 将图像/视频或音频文件保存到数据类型 VarBinary (MAX) 的数据库中。我可以做到这一点...问题是,我无法获取它们并在 xaml 中显示它们,因为我无法正确获取转换部分。这是我到目前为止所拥有的(尽管它不起作用);

    private void bt_Click (object sender, RoutedEventArgs e)
    {
       databaseDataContext context = new databaseDataContext();

        var imageValue = from s in context.Images
                            where s.imageID == 2
                            select s.imageFile;

        value = imageValue.Single().ToString();        
        //convert to string and taking down to next method to get converted in image
    }

    public string value { get; set; }


    public object ImageSource //taking from http://stackoverflow.com/
    {
        get
        {
            BitmapImage image = new BitmapImage();
            try
            {
                image.BeginInit();
                image.CacheOption = BitmapCacheOption.OnLoad;
                image.CreateOptions = BitmapCreateOptions.IgnoreImageCache;
                image.UriSource = new Uri(value, UriKind.Absolute);
                image.EndInit();

                Grid.Children.Add(image);
            }
            catch { return DependencyProperty.UnsetValue; } return image;
        }

    } 

我什至不确定我是否走在正确的轨道上?我假设视频或音频是非常相似的方法?

最佳答案

由于您的图像以二进制格式存储在数据库中,因此您希望通过利用 MemoryStream 对象将其“流”到图像对象中。

查看您的代码,您的解决方案将如下所示:

BitmapImage bmpImage = new BitmapImage();
MemoryStream msImageStream = new MemoryStream();    

msImageStream.Write(value, 0, value.Length);

bmpCardImage.BeginInit();
bmpCardImage.StreamSource = new MemoryStream(msImageStream.ToArray());
bmpCardImage.EndInit();

image.Source = bmpCardImage;

关于c# - 如何在 C# 中从数据库检索时将 varBinary 转换为图像或视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5623264/

相关文章:

c# List<KeyValuePair> 通过键或索引获取值

C#关闭另一个窗体问题,Close();不起作用

java - Nest 聚合搜索请求

c# - 消息框图标 -> 变量?

c# - 左加入 Linq 查询

c# - 使用 LINQ 交换元素

c# - 删除结束元素的空间?

c# - 在两个 asp.net MVC web 应用程序之间传递非 ASCII 字符将不会被识别

c# - 为什么 WCF 服务在持久化新实体之前执行所有查询?

c# - 如何使用linq根据值获取子对象?