我需要找到将图像保存到IsolatedStorage并在Silverlight (XAML)中显示它们的方法重要提示:Silverlight必须"自己"拍摄图像,我不能从后面的代码设置图像我以前尝试过很多解决方案。最后一个解决方案是绑定字节数组并将它们转换为图像XAML
StackPanel Orientation="Horizontal" Margin="0,0,0,20">
<Image Width="110" CacheMode="BitmapCache" Source="{Binding ThumbLocal,Converter={StaticResource imgConverter}}"
Margin="12,0,9,0"/>
<StackPanel Width="311">
背后的代码public byte[] ThumbLocal
{
get;
set;
}
public class ByteImageConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
MemoryStream memStream = new MemoryStream((byte[])value);
memStream.Seek(0, SeekOrigin.Begin);
BitmapImage thumbLocal = new BitmapImage();
thumbLocal.SetSource(memStream);
return thumbLocal;
}
}
一切工作,直到我保存byte[]
到数据库,并试图检索。到目前为止,我可以看到唯一的选项将图像保存为文件到IsolatedStorage,然后检索并转换到byte[]
。这是"聪明"的解决方案吗?
首先,创建这个转换器:
public class BinaryToImageSourceConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value != null && value is byte[])
{
var bytes = value as byte[];
var stream = new MemoryStream(bytes);
var image = new BitmapImage();
image.SetSource(stream);
stream.Close();
return image;
}
return null;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
第二,绑定到你的字节[]使用这个转换器,即,如果你使用MVVM:观点:
<Image Source="{Binding IsolatedStorageImage, Converter={StaticResource BinaryToImageSourceConverter}}" x:Name="ScanImage"/>
你可以在控件(道具片段)中设置属性类型byte[],并从isostorage中读取图像到字节数组,然后将属性值设置为它。如果你还有问题,尽管问我。