从 StreamReader 设置 System.Windows.Controls.Image?

发布于 2024-11-09 06:54:20 字数 121 浏览 3 评论 0原文

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

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

I've got an image in PNG format in a StreamReader object. I want to display it on my WPF form. What's the easiest way to do that?

I've put an Image control on the form, but I don't know how to set it.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

花心好男孩 2024-11-16 06:54:20

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;

The Image.Source property requires that you supply a BitmapSource instance. To create this from a PNG you will need to decode it. See the related question here:

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;
违心° 2024-11-16 06:54:20

这似乎有效:

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

This seems to work:

 image1.Source = BitmapFrame.Create(myStreamReader.BaseStream);
江湖正好 2024-11-16 06:54:20

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

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。

Instead of using a StreamReader, I would directly generate the Stream,

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

where myImage is the name of your Image in XAML

<Image x:Name="myImage"/> 

Update: If you have to use the StreamReader, you get the Stream by using .BaseStream.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文