0

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

public struct ObjectImages
{

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

}

如果我在对象中放入两张10kb的图像,然后尝试序列化,我发现我的内存流目标有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); 

我发现这真的很奇怪!如果您知道问题出在哪里,请告诉我吗?

4

1 回答 1

2

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

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

于 2012-11-30T10:16:58.260 回答