Почему потоковый источник изображения не работает? - PullRequest
7 голосов
/ 11 сентября 2010

Я использую следующий код для потоковой передачи источника изображения:

        BitmapImage Art3 = new BitmapImage();
        using (FileStream stream = File.OpenRead("c:\\temp\\Album.jpg"))
        {
            Art3.BeginInit();
            Art3.StreamSource = stream;
            Art3.EndInit();
        }
        artwork.Source = Art3;

"artwork" - это объект XAML, в котором предполагается показ изображения.Предполагается, что код не блокирует изображение, он не блокирует его нормально, но и не показывает его, и изображение по умолчанию становится «ничем» ... Я предполагаю, что я неправильно использую поток,и что мой образ становится нулевым.Справка?

ОБНОВЛЕНИЕ:

Я сейчас использую следующий код, который мне предложил друг:

        BitmapImage Art3 = new BitmapImage();

        FileStream f = File.OpenRead("c:\\temp\\Album.jpg");

        MemoryStream ms = new MemoryStream();
        f.CopyTo(ms);
        f.Close();

        Art3.BeginInit();
        Art3.StreamSource = ms;
        Art3.EndInit();   

        artwork.Source = Art3;

По какой-то странной причине этот код возвращает следующую ошибку:

Изображение не может быть декодировано.Возможно, заголовок изображения поврежден.

Что я делаю не так?Я уверен, что изображение, которое я пытаюсь загрузить, не повреждено.

Ответы [ 4 ]

11 голосов
/ 11 сентября 2010

Мне удалось решить проблему с помощью следующего кода:

        BitmapImage Art3 = new BitmapImage();

        FileStream f = File.OpenRead("c:\\temp\\Album.jpg");

        MemoryStream ms = new MemoryStream();
        f.CopyTo(ms);
        ms.Seek(0, SeekOrigin.Begin);
        f.Close();

        Art3.BeginInit();
        Art3.StreamSource = ms;
        Art3.EndInit();   

        artwork.Source = Art3; 

Спасибо всем, кто пытался мне помочь!

1 голос
/ 07 мая 2013

Это, вероятно, проще

BitmapImage Art3 = new BitmapImage(new Uri("file:///c:/temp/Album.jpg"));
1 голос
/ 11 сентября 2010

Удаление исходного потока приведет к тому, что BitmapImage больше не будет отображать то, что было в потоке. Вам придется отслеживать поток и утилизировать его, когда вы больше не используете BitmapImage.

0 голосов
/ 11 сентября 2010

Вы пробовали:

        BitmapImage Art3 = new BitmapImage();
        using (FileStream stream = File.OpenRead("c:\\temp\\Album.jpg"))
        {
            Art3.BeginInit();
            Art3.StreamSource = stream;
            stream.Flush();
            Art3.EndInit();
        }
        artwork.Source = Art3;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...