c# - 显示来自 byte[ ] 的图像

标签 c# wpf image xaml byte

我使用 C#,wpf。我有一张图片,它以以下形式存储:byte[ ]

public interface IFile
{
    int Id { get; set; }
    byte[] FileData { get; set; }        
    string FileName { get; set; }
    int? FileSize { get; set; }
    string FileExtension { get; set; }
}

如何在表单上显示我的图像 (FileData byte[ ])?

<GroupBox BorderThickness="1">
    <Image Source="..."/>
</GroupBox>

如果我从 byte[ ] 创建一个临时文件,我必须在 Source=".​​.." 中写入吗?

最佳答案

假设您有一个实现了IFile 接口(interface)的 View 模型类,并且它的FileData 属性包含一个像PNG 或JPEG 这样的编码图像缓冲区,您可以直接像这样绑定(bind)到属性:

<Image Source="{Binding FileData}"/>

这是因为 WPF 提供了从多种源类型(包括 byte[])到 ImageSource 的内置自动类型转换。


类型转换由类ImageSourceConverter进行,注册为TypeConverter

[TypeConverterAttribute(typeof(ImageSourceConverter))]
public abstract class ImageSource ...

并做类似的事情:

byte[] buffer = ...
ImageSource result;
using (var stream = new MemoryStream(buffer))
{
    result = BitmapFrame.Create(
        stream, BitmapCreateOptions.None, BitmapCacheOption.OnLoad);
}

关于c# - 显示来自 byte[ ] 的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39365382/

相关文章:

c# - 从文件系统读取 ASPX 文件并呈现为 HTML

wpf - 在 WPF 中,如何获取与鼠标光标下方的 TreeView 项关联的数据对象?

c# - 在 WPF 中获取窗口的真实位置

java - 图像压缩或转换

c# - 为什么 C# 在实现接口(interface)时不允许继承返回类型

c# - Visual Studio Performance Profiler "Force GC"按钮实际上在做什么?

java - 从 List<> 数组渲染

android - 如何使用Delphi XE5在IOS上保存位图图片

c# - xsd.exe 将类生成为单独的文件?

c# - 设计问题 - 面向对象的食品应用