2

アプリケーションにC#/。NETを使用すると、メインデータモデルに「バイナリ」(テキストではなく)コンテンツを表す一連のクラスがあります。私は次のような継承設定を持っています:

代替テキスト

基本的に、抽象クラスには、任意のバイナリデータを格納BinaryContentするが含まれています。MemoryStreamそのデータはディスク上のファイルから読み取られます。保存する予定のバイナリデータの各タイプは、やなどの派生タイプにImageContentなりFontContentます。これらの派生型は、のバイナリデータを解釈しBinaryContent.Contentます。ImageContentたとえば、BitmapImageMemoryStreamから(ImageSourceに格納された)を作成します。FontContentもちろん、からフォントを作成しますBinaryContent.Content。基本的にコンテンツファイル(つまり画像)のコピーを保存できるようにし、ファイルがディスク上の特定の場所に何度もあることに依存する必要がないようにするために、この方法を選択しました。

また、バイナリシリアル化を使用して、これらのクラスのインスタンスを「プロジェクトファイル」に保存しています。私はこれを基本的にすべてを一緒に「パッケージ化」するために行いました。MemoryStreamを逆シリアル化しようとすると、問題が発生するようです。MemoryStreamからイメージを作成すると、問題が発生します。デシリアライズ後に次のメソッドを実行すると、FileFormatexceptionが発生します。

private void RefreshImageFromContent()
{
    BitmapImage image = null;
    if (Content != null &&
        Content.Length != 0L)
    {
        image = new BitmapImage();
        image.BeginInit();
        image.StreamSource = Content;
        image.EndInit(); //throws FileFormatException
    }

    Image = image;
}

メッセージは次のFileFormatExceptionとおりです。「画像をデコードできません。画像ヘッダーが破損している可能性があります。」内部例外:「HRESULTからの例外:0x88982F61」

今のところ私の一番の推測は、BinaryContent.Contentシリアル化または逆シリアル化中にデータが破損する何かが起こっているということです。

これは私に2つの質問をするように導きます。

  1. この問題を解決するための提案はありますか?
  2. (逆)シリアル化される任意のバイナリデータを格納する他の提案された方法はありますか?

私の質問については、遠慮なく説明を求めてください。

ありがとう。

4

1 に答える 1

2

content.Positionで何image.StreamSource = Content;ですか?

ストリームの位置が開始(またはストリーム内の正しい位置)に設定されていない可能性があります。

于 2010-10-20T14:53:32.963 に答える