将图像有效地存储在XML文件中

Syn*_*ynn 5 c# xml compression wpf image

我目前正在编写一个程序,用于在XML文件中创建和填充WPF应用程序中的控件.其中一个功能是用户可以选择他想要在程序中显示的图像.此图像显示在图像控件中.选择图像后,程序会将所有数据保存回XML文件.

图像将被转换并保存如下:

byte[] bytes = new byte[1];
MemoryStream ms = new MemoryStream();
System.Drawing.Image image = new Bitmap(sPathOfImage);

image.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
bytes = ms.ToArray();
XElement Image = new XElement("Image", Convert.ToBase64String(bytes));

xDocument.Add(Image);
xDocument.Save("xDocument.xml");
Run Code Online (Sandbox Code Playgroud)

这很好用,一切都很好.但是,主要问题是XElement Image的值的长度.即使是40kb的图像,长度也是60,000个标志.对于一个9mb的图像,它需要13,200,000个巨大的标志.现在我正在寻找一种更好的解决方案来将图像存储在XML文件中.

通过规范,它必须在一个XML文件中.

那么,是否有一种很好的方法可以使字符串更小,更合适的流,我错过的任何东西?任何提示都表示赞赏.

Yau*_*sau 4

将图像内容填充到 XML 文件中不会发生任何神奇的事情。内容将与原始文件大小成比例。即使压缩文件并将其保存到 XML 中也无济于事,因为有些图像被压缩的可能性较低。出于评估目的,我决定了解 Visual Studio 如何将图像保留在其资源文件中。结果如下:

  • VS将图像放在Resource文件夹下
  • 在 Resource.resx 中放置对图像的引用

..

  <data name="_myimage" type="System.Resources.ResXFileRef, System.Windows.Forms">
    <value>Resources\myimage.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
  </data>
Run Code Online (Sandbox Code Playgroud)

也许停止重复发明轮子并相信专业人士是否有意义?:)