我是这个网站的新手。这是我的第一个问题!希望somone知道答案。
这是交易,我有一个数据库,其实体将字节数组作为图片(实体属性之一)。 这是在将pic保存到DB之前将pic转换为byte []的代码:
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();
}
当我从数据库中拉出实体时,我发现它带有图片的正确数据为byte []。
我正在使用Windows 8.1应用程序和mvvmCross。在我的viewModel中,我有一个名为selectedGuest的完整道具。此属性包含当前访客。所有关于客人的信息都是succsessfuly转换为UI接受图像!这是图像的xaml:
<Image Grid.Column="2" Source="{Binding SelectedGuest.Image, Converter={StaticResource ByteArrayToImageConverter}}"/>
这是转换器:
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();
}
}
当调试线程时,输入转换器和&#39;值&#39;是正确的!但是我无法看到图像。什么都没有,图像就不会显示出来了。
感谢观众!
答案 0 :(得分:0)
您应该将原始编码图像缓冲区(即二进制图像文件内容)存储在数据库中,而不是原始像素数据:
public async Task<byte[]> ImageFileToByteArrayAsync(StorageFile file)
{
var buffer = await FileIO.ReadBufferAsync(file);
return buffer.ToArray();
}