C# 如何在windows 8应用程序中将字节数组绑定为图像

C# 如何在windows 8应用程序中将字节数组绑定为图像,c#,database,image,xaml,data-binding,C#,Database,Image,Xaml,Data Binding,我对这个网站很陌生。这是我的第一个问题!希望有人知道答案 这里是交易,我有一个数据库的实体持有一个字节数组作为图片(实体属性之一)。 以下是在将pic保存到DB之前将其转换为字节[]的代码: public async Task<byte[]> ImageFileToByteArrayAsync(StorageFile file) { IRandomAccessStream stream = await file.OpenAsync(Windows.Storage.FileAc

我对这个网站很陌生。这是我的第一个问题!希望有人知道答案

这里是交易,我有一个数据库的实体持有一个字节数组作为图片(实体属性之一)。 以下是在将pic保存到DB之前将其转换为字节[]的代码:

public async Task<byte[]> ImageFileToByteArrayAsync(StorageFile file)
{
    IRandomAccessStream stream = await file.OpenAsync(Windows.Storage.FileAccessMode.Read);
    BitmapDecoder decoder = await BitmapDecoder.CreateAsync(stream);
    PixelDataProvider pixelData = await decoder.GetPixelDataAsync();
    return pixelData.DetachPixelData();
}
调试时,线程进入转换器,“值”正确!但是我怎么也看不到这张照片。什么都没有发生,只是图像无法显示


谢谢观众!

您应该在数据库中存储原始编码图像缓冲区(即二进制图像文件内容),而不是原始像素数据:

public async Task<byte[]> ImageFileToByteArrayAsync(StorageFile file)
{
    var buffer = await FileIO.ReadBufferAsync(file);
    return buffer.ToArray();
}
公共异步任务ImageFileToByteArrayAsync(存储文件)
{
var buffer=await FileIO.ReadBufferAsync(文件);
返回buffer.ToArray();
}
public class ByteArrayToImageConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, string language)
    {
        if (value == null || !(value is byte[]))
            return null;

        using (InMemoryRandomAccessStream stream = new InMemoryRandomAccessStream())
        {
            using (DataWriter writer = new DataWriter(stream.GetOutputStreamAt(0)))
            {
                writer.WriteBytes((byte[])value);
                writer.StoreAsync().GetResults();
            }
            BitmapImage image = new BitmapImage();
            image.DecodePixelHeight = 200;
            image.DecodePixelWidth = 150;
            image.SetSource(stream);
            return image;
        }
    }
    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        throw new NotImplementedException();
    }
}
public async Task<byte[]> ImageFileToByteArrayAsync(StorageFile file)
{
    var buffer = await FileIO.ReadBufferAsync(file);
    return buffer.ToArray();
}