BitmapImage: доступ к закрытому StreamSource - PullRequest
1 голос
/ 23 марта 2012

Я использую следующий код, пытаясь преобразовать мой BitmapImage в байт [], чтобы я мог сохранить его в моей базе данных MS SQL.

    public static byte[] BufferFromImage(BitmapImage img)
    {
        if (img == null)
            return null;

            byte[] result = null;
            using (Stream stream = img.StreamSource)
            {
                if (stream != null && stream.Length > 0)
                {
                    using (BinaryReader br = new BinaryReader(stream))
                    {
                        result = br.ReadBytes((int)(stream.Length));
                    }
                }
            }

            return result;
        }

К сожалению, это не работает, так как img.StreamSource удаляется, когда я пытаюсь получить к нему доступ в операторе if, что приводит к исключению «Не удается получить доступ к удаленному файлу».* Мой звонок: BufferFromImage(imgLogo.Source as BitmapImage);

Как мне избежать этого?

1 Ответ

4 голосов
/ 24 марта 2012

Мне наконец удалось заставить это работать:

    public static byte[] BufferFromImage(BitmapImage img)
    {
        byte[] result = null;

        if (img != null)
        {
            using(MemoryStream memStream = new MemoryStream())
            {
                JpegBitmapEncoder encoder = new JpegBitmapEncoder();
                encoder.Frames.Add(BitmapFrame.Create(img));
                encoder.Save(memStream);

                result = memStream.ToArray();
            }

        }

        return result;
    }
...