我的 WP7 应用程序有一个 Image 控件,其 Source 在 XAML 中设置为一个图像,其 Build Action 设置为 Content:
<Image x:Name="MyImage" Source="/Images/myimage.png"/>
我需要将此图像作为字节数组存储在我的 SqlCe 数据库中。这是我当前要转换为 byte[] 的代码:
public byte[] ImageToArray() {
BitmapImage image = new BitmapImage();
image.CreateOptions = BitmapCreateOptions.None;
image.UriSource = new Uri( "/Images/myimage.png", UriKind.Relative );
WriteableBitmap wbmp = new WriteableBitmap( image );
return wbmp.ToArray();
}
字节数组保存到数据库中,但是当我检索并且我的转换器尝试将其转换回来(在不同的页面上)时,我得到“未指定的错误”。这是我的转换器:
public class BytesToImageConverter : IValueConverter {
public object Convert( object Value, Type TargetType, object Parameter, CultureInfo Culture ) {
if( Value != null && Value is byte[] ) {
byte[] bytes = Value as byte[];
using( MemoryStream stream = new MemoryStream( bytes ) ) {
stream.Seek( 0, SeekOrigin.Begin );
BitmapImage image = new BitmapImage();
image.SetSource( stream ); // Unspecified error here
return image;
}
}
return null;
}
public object ConvertBack( object Value, Type TargetType, object Parameter, CultureInfo Culture ) {
throw new NotImplementedException( "This converter only works for one way binding." );
}
}
我已经做了很多搜索。至于转换器,我的代码非常标准。我见过提到这stream.Position = 0;
是必要的,但我的理解stream.Seek
是做同样的事情;我都试过了。
由于我的转换器与我现在在大约十几个项目中使用的转换器相同,我相当确信问题在于将 Image 控件的 Source 转换为字节数组,因此我的图像数据已损坏。在上面的代码中,我对 Uri 进行了硬编码,但我也尝试过
BitmapImage image = MyImage.Source as BitmapImage;
没有运气。我一直在这几个小时,我的智慧结束了。我错过了什么?