How to convert varBinary into image or video when retrieved from database in C#

前端 未结 4 1844
孤街浪徒
孤街浪徒 2021-01-16 06:31

I am using visual studio 2010, (desktop application) and using LINQ to SQL to save image/video or audio files to database in dataType VarBinary (MAX). This I ca

相关标签:
4条回答
  • 2021-01-16 07:18

    Since your image is stored in binary format in the database, you want to "stream" this into an image object by leveraging the MemoryStream object.

    Looking at your code, your solution will look something like this:

    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;
    
    0 讨论(0)
  • 2021-01-16 07:31

    It's very easy, if you have a binary data and want to create an Image object, use this code:

    public Image BinaryToImage(byte[] binaryData)
    {
         MemoryStream ms = new MemoryStream(binaryData);
         Image img = Image.FromStream(ms);
         return img;
    }
    
    0 讨论(0)
  • 2021-01-16 07:31

    Dillie-O's code makes for a very nice extension method:

        // from http://stackoverflow.com/questions/5623264/how-to-convert-varbinary-into-image-or-video-when-retrieved-from-database-in-c:
        public static BitmapImage ToImage(this Binary b)
        {
            if (b == null)
                return null;
    
            var binary = b.ToArray();
            var image = new BitmapImage();
            var ms = new MemoryStream();
    
            ms.Write(binary, 0, binary.Length);
    
            image.BeginInit();
            image.StreamSource = new MemoryStream(ms.ToArray());
            image.EndInit();
    
            return image;
        }
    
    0 讨论(0)
  • 2021-01-16 07:38

    If you already have the bytes, to verify that what you saved is correct you can save the bytes to a file and open it....

    string tempFile = Path.GetTempFileName();
    MemoryStream ms = new MemoryStream(bytes); //bytes that was read from the db
    //Here I assume that you're reading a png image, you can put any extension you like is a file name
    FileStream stream = new FileStream(tempFile + ".png", FileMode.Create);
    ms.WriteTo(stream);
    ms.Close();
    stream.Close();
    //And here we open the file with the default program
    Process.Start(tempFile + ".png");
    

    And later you can use the answer of Dillie-O and stream....

    0 讨论(0)
提交回复
热议问题