私の WP7 アプリには、ソースが XAML でビルド アクションがコンテンツに設定されたイメージに設定されているイメージ コントロールがあります。
<Image x:Name="MyImage" Source="/Images/myimage.png"/>
このイメージを SqlCe データベースにバイト配列として保存する必要があります。これは、バイト[]に変換する現在のコードです:
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
は同じことをしています。私は両方を試しました。
私のコンバーターは、現在約 12 のプロジェクトで使用してきたものと同じであるため、問題は Image コントロールの Source をバイト配列に変換することにあり、そのため画像データが破損していると確信しています。上記のコードでは、Uri をハードコーディングしていますが、次のことも試しました。
BitmapImage image = MyImage.Source as BitmapImage;
運がなければ。私は何時間もこれに取り組んでいて、機知に富んでいます。私は何が欠けていますか?