为什么图像的流媒体源不起作用?

时间:2010-09-10 21:11:35

标签: c# wpf image stream

我使用以下代码来传输图像源:

        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 个答案:

答案 0 :(得分:10)

我设法通过使用以下代码来解决问题:

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

处理源流将导致BitmapImage不再显示流中的任何内容。当你不再使用BitmapImage时,你必须跟踪流并处理它。

答案 2 :(得分:1)

这可能更简单

BitmapImage Art3 = new BitmapImage(new Uri("file:///c:/temp/Album.jpg"));

答案 3 :(得分:0)

你试过了吗?

        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;