如何在wpf中将图像文件保存为字符串?

时间:2016-03-27 01:45:23

标签: wpf image

我想阅读图片文件(png,jpg等)。 并保存xml文件,从xml加载图像。

但首先。反序列化抛出System.InvalidOperationException。 第二。我不知道下面的方法是否正确。


方案。

1.从hdd打开图像文件 2.在我的应用程序中保存文档(带有像'SomeClass'之类的图像的文本) 3.保存文档时,应用程序将使用图像序列化SomeClass 4.重新运行应用程序,并加载xml文件 5.然后,在我的申请中显示图像。

using (MemoryStream ms = new MemoryStream(File.ReadAllBytes(@"C:\z.jpg")))
{
    StreamReader sr = new StreamReader(ms);
    someClass.ImageData = sr.ReadToEnd();
    Xml.Serialize<SomeClass>(someClass, @"C:\z.xml");
}

 SomeClass someClass = Xml.Deserialize<SomeClass>(@"C:\z.xml");

 BitmapImage image = new BitmapImage();
 image.BegineInit();
 image.Source = ??
 image.EndInit();

 System.Windows.Controls.Image imageControl = new Image();
 imageControl.Source = image;

 this.Content = imageControl;

这是序列化,反序列化静态方法。

public static class Xml
{
    public static void Serialize<T>(T data, string path)
    {
        XmlSerializer s = new XmlSerializer(typeof(T));

        using (FileStream fs = new FileStream(path, FileMode.Create))
        {
            s.Serialize(fs, data);
        }
    }

    public static T Deserialize<T>(string path)
    {
        XmlSerializer s = new XmlSerializer(typeof(T));
        using (FileStream fs = new FileStream(path, FileMode.Open))
        {
            fs.Position = 0;
            return (T)s.Deserialize(fs);
        }
    }
}

这是SomeClass

[Serializable]
public class SomeClass
{
    public string ImageData { get; set; }
    public string TextData { get; set; }
}
谢谢。

1 个答案:

答案 0 :(得分:3)

您需要将二进制图像数据转换为字符串。您可以使用Convert方法来处理它。

编辑备注 - 注意到您正在将所有字节读入内存流,然后再从流式读取器中读取它们。它会简化代码直接读取它并将这些字节转换为Base64。

以下示例。

someClass.ImageData = Convert.ToBase64String(File.ReadAllBytes(@"C:\z.jpg"));
Xml.Serialize<SomeClass>(someClass, @"C:\z.xml");

------------------

SomeClass someClass = Xml.Deserialize<SomeClass>(@"C:\z.xml");

BitmapImage image = new BitmapImage();
image.BegineInit();
image.Source = Convert.FromBase64String(someClass.ImageData);
image.EndInit();