我使用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="..."
吗?
答案 0 :(得分:4)
如果你有一个实现IFile
接口的视图模型类,并且它的FileData
属性包含一个像PNG或JPEG这样的编码图像缓冲区,你可以直接绑定到这个属性,就像这样:
<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);
}