奇怪的二进制格式化程序行为

时间:2012-11-30 10:13:32

标签: .net binaryformatter

我有一个包含图像数组的结构:

public struct ObjectImages
{

    public System.Drawing.Image[] _images;
    public ObjectImages(System.Drawing.Image[] images)
    {
          _images = images; 
    }

}

如果我在对象中放入10 kb的两张图像然后尝试序列化,我发现我的内存流目标有160kb。我验证了,每个图像都有~10-11kb。

ObjectImages o = new ObjectImages(x); // where x is an array of images from my webcam
MemoryStream ms = new MemoryStream();
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(ms, o); 
我发现真的很奇怪!如果你知道问题出在哪里,能告诉我吗?

1 个答案:

答案 0 :(得分:2)

嗯,当您在硬盘上看到图像时,它会被压缩 - 例如PNG或JPEG文件。在C#中加载图像时,它会被解压缩,因此可以渲染像素。所以实际上,图像包含的字节数多于存储在硬盘上的字节数。

C#对象包含未压缩的数据,因此粗略地(对于RGBA图像),内存中的大小应该是.NET所需的(4 * width * height) + further data。二进制格式化程序不保存图像(作为PNG或JPEG),它保存表示图像的对象