如何在Wp7中使用Xml序列化序列化bitmapImage

时间:2012-03-07 10:56:06

标签: security windows-phone-7 xml-serialization bitmapimage

我使用Xml序列化对bitmapImage进行了序列化。它给出了错误,    “Uri的XML序列化抛出SecurityException”

我在Observablecollection中有BitmapImage的集合。 OnDeactivation(Tombstone)我正在保存Persistent类的属性类型。关于保存我使用了Serailization。

请帮助我,如何解决这个问题

2 个答案:

答案 0 :(得分:2)

我建议保存到隔离存储。

以下是我使用的方法:

将BitmapImage转换为byte []并返回的实用程序方法:

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;
    }
}

然后,您可以轻松地将byte []存储到Isolated Storage。我使用了这样的词典:

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 :(得分:1)

图像到xml?更好的方法是将其作为文件保存到独立存储