1

Silverlightアプリでは、次のようにビットマップを保存します。

public static void SaveBitmapImageToIsolatedStorageFile(OpenReadCompletedEventArgs e, string fileName)
{
    using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication())
    {
        using (IsolatedStorageFileStream isfs = new IsolatedStorageFileStream(fileName, FileMode.Create, isf))
        {
            Int64 imgLen = (Int64)e.Result.Length;
            byte[] b = new byte[imgLen];
            e.Result.Read(b, 0, b.Length);
            isfs.Write(b, 0, b.Length);
            isfs.Flush();
            isfs.Close();
            isf.Dispose();
        }
    }
}

次のように読み返します

public static BitmapImage LoadBitmapImageFromIsolatedStorageFile(string fileName)
{
    string text = String.Empty;

    using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication())
    {
        if (!isf.FileExists(fileName))
            return null;

        using (IsolatedStorageFile isoStore = IsolatedStorageFile.GetUserStoreForApplication())
        {
            using (IsolatedStorageFileStream isoStream = isoStore.OpenFile(fileName, FileMode.Open))
            {
                BitmapImage bitmapImage = new BitmapImage();
                bitmapImage.SetSource(isoStream);
                return bitmapImage; // "Catastrophic Failure: HRESULT: 0x8000FFFF (E_UNEXPECTED))"
            }
        }
    }
}

しかし、これにより常に「壊滅的な障害: HRESULT: 0x8000FFFF (E_UNEXPECTED))」エラーが発生します。

実際にはテキストファイルだったサーバーからpngファイルを読み込もうとしたときに、このエラーを見たことがあります。そのため、ビットマップが正しく保存されていないと思います

BitmapImage が正しく保存されていないことを誰でも確認できますか? または、なぜこのエラーが発生するのでしょうか?

アップデート:

BitmapImage が作成されると、書き込まれるバイト配列の長さが 1876 バイトで、すべて 0 であることがわかります。なぜでしょうか?

4

1 に答える 1

1

私はそれを機能させましたが、正確な理由は不明です。このコードの後に​​SaveBitmapImageToIsolatedStorageFile(...)を呼び出していました:

BitmapImage bitmapImage = new BitmapImage();
bitmapImage.SetSource(e.Result);
Image image = new Image();
image.Source = bitmapImage;

そのコードのに呼び出すと、機能します。

どうやらSetSource()はe.Resultのバイトをゼロにしますが、長さは維持しますか?

于 2010-04-14T14:58:04.643 に答える