从内存流大小不一致创建映像

时间:2011-11-30 08:53:50

标签: c# .net image bitmap

我正在从内存流中创建一个“gif”图像。我有43个字节的内存流。当我从这个流创建一个图像时,我得到一个70字节的图像。可能是什么问题?这是我创建图像的代码:

Bitmap httpimage2 = new Bitmap(ms, true);           // ms: 43 bytes memory stream
httpimage2.Save(@"D:\sample.gif", ImageFormat.Gif); // httpimage2: 70 bytes image

3 个答案:

答案 0 :(得分:1)

我不是专家,可能是因为第二张图片存储的是较大的调色板。图像是否按像素相同?

编辑:还要注意,框架可能会对图像进行编码,而不是原始图像的编码方式。

答案 1 :(得分:0)

它们是不同的格式,为什么它们的大小相同?

This提供了有关bmp格式的详细信息,并指出内存格式不包含14字节的位图文件头,这说明了一些差异。

This提供有关GIF格式的详细信息。

通常可以对在内存中表示图像的字节做出一些假设,因为您可能不需要文件中的任何内容来指示图像的元数据,因为这个元数据可以隐含在类中。将字节作为表示。例如,GIF具有指示格式的固定长度标题,87a或89a。这在内存中可能不是必需的,因为你可能有不同的类,它们只包含代表图像的字节,一个类是87a的图像,一个类是89a的图像。现在内存中的图像可以更小,因为您不需要文件中的信息有关它的格式,因为这只是在读取hte文件时需要用于决定实例化哪个类

由于格式不同,因此需要不同的金额信息来编码同一图像。

如果您将图像作为位图保存到磁盘,您可能会发现图像的大小更相似,但它们可能仍然是不同的大小,如果它们的大小相同则只是巧合。

答案 2 :(得分:0)

尝试为图像保存调色板和bitsPerPixel,并在创建

中使用它们