c# - 在 XML 文件中有效地存储图像

标签 c# xml wpf image compression

我目前正在编写一个程序,该程序通过 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");

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

根据规范,它必须在一个 XML 文件中。

那么,有没有什么好方法可以让字符串更小,成为更合适的流,我遗漏了什么?任何提示表示赞赏。

最佳答案

将图像内容填充到 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>

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

关于c# - 在 XML 文件中有效地存储图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20630088/

相关文章:

c# - ZeroMQ PUB/SUB 模式与多线程轮询取消

xml - 如何用 XML 表示列表数据

xml - 我有这个 XML 子集的 LL(1) 语法吗?

JAVA pretty-print XML,带有正确格式的注释

c# - WPF 成长动画

c# - 使用委托(delegate)发送字符串

c# - 在 .NET 中截取屏幕截图后出现运行时错误

wpf - CallerMemberName 与 VB 的 INotifyPropertyChange 一起使用?

c# - WPF 数据绑定(bind)堆栈面板

wpf - 连接 CollectionChanged 和 PropertyChanged (或 : Why do some WPF Bindings not refresh? )