2

私の 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;

運がなければ。私は何時間もこれに取り組んでいて、機知に富んでいます。私は何が欠けていますか?

4

2 に答える 2

0

image.UriSource からの byte[] は base64 radix である可能性があります。byte[] または SQL tale のデータを参照できます。基数が間違っている場合、byte[] からストリームに逆変換できません。したがって、基数が 64 の場合、基数 16 に変換する必要があります。

于 2013-07-10T00:54:26.417 に答える