Image字节数组序列化过程中的奇怪行为

时间:2012-01-22 12:12:42

标签: c# image xml-serialization

我遇到了一些恼人的问题,我使用一些代码将图像的字节数组序列化为XML并再次返回,在反序列化后读取字节时,某些字节会有不断的变化。

我的代码与图像格式无关,但就我的情况而言,我正在使用PNG图像(我在几个png文件上测试过)。

序列化代码:

var serializer = new XmlSerializer(instance.GetType());
        using (var sw = new StringWriter())
        {
            serializer.Serialize(sw, instance);
            return sw.ToString();
        }

反序列化代码:

 public T Deserialize<T>(string xml)
        where T : class, new()
    {
        var serializer = new XmlSerializer(typeof (T));

        using (var stringReader = new StringReader(xml))
        {
            return (T) serializer.Deserialize(stringReader);
        }
    }

Xml映射属性:

    [System.Xml.Serialization.XmlElementAttribute(DataType="base64Binary")]
    public byte[] Image
    {
        get
        {
            return this.imageField;
        }
        set
        {
            this.imageField = value;
        }
    }
找到差异:

嵌入字节属于用于单元测试的嵌入式图像, 合同中的图像是来自反序列化合同的字节数组图像。

embeddedBytes[73]=194, imageFromContract[73] = 192
embeddedBytes[77]=194, imageFromContract[77] = 192
embeddedBytes[79]=21, imageFromContract[79] = 106
embeddedBytes[80]=40, imageFromContract[80] = 214
embeddedBytes[81]=74, imageFromContract[81] = 137
embeddedBytes[82]=128, imageFromContract[82] = 9

这就是我获取图像字节的方式(GetImage()只是从嵌入式资源中返回Image)

public static byte[] GetImageBytes()
    {
        var img = GetImage();
        var embeddedImageMemStream = new MemoryStream();
        img.Save(embeddedImageMemStream, img.RawFormat);

        return embeddedImageMemStream.ToArray();
    }

如果有人能对此事有所了解,我们将不胜感激。

提前致谢

编辑:包含一张经过测试的图片, enter image description here

0 个答案:

没有答案