【问题标题】:Set System.Windows.Controls.Image from StreamReader?从 StreamReader 设置 System.Windows.Controls.Image?
【发布时间】:2012-02-07 02:55:13
【问题描述】:

我在 StreamReader 对象中有一个 PNG 格式的图像。我想在我的 WPF 表单上显示它。最简单的方法是什么?

我在表单上放了一个Image 控件,但我不知道如何设置。

【问题讨论】:

    标签: wpf image streamreader


    【解决方案1】:

    Image.Source 属性要求您提供 BitmapSource 实例。要从 PNG 创建它,您需要对其进行解码。在此处查看相关问题:

    WPF BitmapSource ImageSource

    BitmapSource source = null;
    
    PngBitmapDecoder decoder;
    using (var stream = new FileStream(@"C:\Temp\logo.png", FileMode.Open, FileAccess.Read, FileShare.Read))
    {
        decoder = new PngBitmapDecoder(stream, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.None);
    
        if (decoder.Frames != null && decoder.Frames.Count > 0)
            source = decoder.Frames[0];
    }
    
    return source;
    

    【讨论】:

      【解决方案2】:

      这似乎有效:

       image1.Source = BitmapFrame.Create(myStreamReader.BaseStream);
      

      【讨论】:

        【解决方案3】:

        我会直接生成 Stream,而不是使用 StreamReader,

        FileStream strm = new FileStream("myImage.png", FileMode.Open);
        PngBitmapDecoder decoder = new PngBitmapDecoder(strm,
            BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);
        myImage.Source = decoder.Frames[0];
        

        其中 myImage 是 XAML 中图像的名称

        <Image x:Name="myImage"/> 
        

        更新:如果你必须使用 StreamReader,你可以使用 .BaseStream 来获取 Stream。

        【讨论】:

        • Psssttt ... FileStream 是 IDisposable - 注意那些内存泄漏 ;-)
        • 解码器得到需要的功能退出后是不是很酷?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-01-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-26
        • 2013-02-10
        相关资源
        最近更新 更多