Как сериализовать bitmapImage с использованием сериализации Xml в Wp7 - PullRequest
0 голосов
/ 07 марта 2012

У меня есть сериализация bitmapImage с использованием сериализации Xml. Это дает ошибку, «XML-сериализация Uri создает исключение SecurityException»

У меня есть коллекция BitmapImage в Observablecollection. OnDeactivation (Tombstone) Я сохраняю типы свойств персистентного класса. При сохранении я использовал Serailization.

Пожалуйста, помогите мне, как решить эту проблему

Ответы [ 2 ]

2 голосов
/ 11 мая 2012

Предлагаю также сохранить в изолированном хранилище.

Вот подход, который я использовал:

Служебные методы для преобразования BitmapImage в байт [] и обратно:

public sealed class ImageConverter
{
    public static byte[] ConvertToBytes(BitmapImage bitmapImage)
    {
        if (bitmapImage == null)
        {
            return null;
        }
        WriteableBitmap image = new WriteableBitmap(bitmapImage);

        using (MemoryStream stream = new MemoryStream())
        {

            image.SaveJpeg(stream, image.PixelWidth, image.PixelHeight, 0, 100);
            return stream.ToArray();
        }
    }

    public static BitmapImage ConvertToImage(byte[] byteArray)
    {
        if (byteArray == null)
        {
            return null;
        }

        BitmapImage bitmapImage = new BitmapImage();

        using (MemoryStream stream = new MemoryStream(byteArray))
        {
            bitmapImage.SetSource(stream);
        }
        return bitmapImage;
    }
}

Затем вы можете сохранить байт [] в изолированном хранилище тривиально. Я использовал словарь, как это:

IsolatedStorageSettings settings = IsolatedStorageSettings.ApplicationSettings;

    public BitmapImage getImageForURL(string URL)
    {
        Dictionary<string, byte[]> imageDictionary = (Dictionary<string, byte[]>)settingsDictionary["imageDictionary"];
        if (imageDictionary != null) 
        {
            byte[] byteArray = null;
            imageDictionary.TryGetValue(URL, out byteArray);
            return ImageConverter.ConvertToImage(byteArray);
        }
        return null;
    }

    public void setImageForURL(string URL, BitmapImage image)
    {
        Dictionary<string, byte[]> imageDictionary = (Dictionary<string, byte[]>)settingsDictionary["imageDictionary"];
        if (URL != null && image != null) {
            imageDictionary[URL] = ImageConverter.ConvertToBytes(image);
        }
    }
1 голос
/ 07 марта 2012

Изображение в XML? Лучше всего сохранить его в изолированном хранилище в виде файла

...