【问题标题】:Serializing a list of system.drawing.image with tag filled序列化带有填充标签的 system.drawing.image 列表
【发布时间】:2019-02-12 13:39:29
【问题描述】:
  • 创建新的 system.drawing.image
  • 为 image.tag 设置值
  • 将图像添加到图像列表

    ImageList = New List(Of System.Drawing.Image)

    Using stream As IO.FileStream = File.Open(ThumbFilePath, IO.FileMode.Create)
    Dim formatter As New Runtime.Serialization.Formatters.Binary.BinaryFormatter
    formatter.Serialize(stream, ImageList)
    stream.Flush()
    stream.Close()
    End Using
    

所以当我从流中检索图像列表并反序列化时,image.tag 什么都不是。我认为标签甚至根本没有序列化。 有没有办法可以将标签信息与列表中的每个图像一起保存并序列化以在以后检索它?

【问题讨论】:

  • 为什么不以一种受支持的格式保存图像?尝试序列化图像,尤其是使用BinaryFormatter,没有任何意义。没有其他应用程序能够理解这一点。 .NET 本身将无法读取此内容
  • 某些图像格式有额外的元数据和标签。使用适当的格式,而不是尝试通过序列化抽象 Image 类来“破解”它
  • 我用它来制作文档的缩略图列表。有时 1 页,有时 100 页。我想将所有拇指存储在 1 个文件中。这就是为什么我做了这个“解决方案”,所以我只有一个文件可以读取,所有的拇指都在里面。它适用于.Net,反序列化后我可以看到所有拇指,但看不到标签。那是我的问题。不是我的解决方案是正确的,而是标签是否可以序列化;)。
  • 解决方法是错误的,这就是为什么没有标签可以序列化。图片是一个抽象类。 Tag 属性是 VB6 的遗留物,用于存储可能对 UI 有用的“东西”。它不是图像本身的一部分。如果您检查the property docs,您会看到它在序列化过程中被转换为字符串。如果您存储任何 无法 转换为字符串的内容,您将无法取回它。最后,BinaryFormatter 非常脆弱且不安全
  • 有适当的方法来存储缩略图和属性。某些格式可以有多个页面,例如 TIFF。其他格式可以存储 EXIF 标签,如 JPG 和 TIFF。在web开发中,多张图片组合成一张大图,并使用偏移量来显示大图中存储的其中一张图片

标签: .net serialization


【解决方案1】:

反序列化:

Using stream As IO.FileStream = IO.File.Open(ThumbFilePath, IO.FileMode.Open, IO.FileAccess.Read)
            Dim formatter As New Runtime.Serialization.Formatters.Binary.BinaryFormatter
            ImageList = CType(formatter.Deserialize(stream), List(Of System.Drawing.Image))
        End Using

【讨论】:

  • 欢迎来到 Stack Overflow!请仅将发布答案按钮用于实际答案。您应该修改原始问题以添加更多信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多