1

我正在尝试将灰度图像转换为字节数组。我使用以下代码。但是,生成的字节数组不是逻辑大小。

ImageConverter converter = new ImageConverter();
byte[] test = (byte[])converter.ConvertTo(gpuMatch.Bitmap,typeof(byte[]));

图像是灰度 792x410 8 位深度。那么数组大小不应该是 324720 字节吗?我在字节数组中得到了接近 140122 个元素的东西。

ImageConverter ic = new ImageConverter();
Image img = (Image)ic.ConvertFrom(test);

如果我将字节重新转换为图像,则图像是完整的。有人可以解释为什么这种不匹配吗?

谢谢坎南

4

3 回答 3

2

返回的字节数组不是图像的原始表示,其中一个字节代表一个像素。相反,它取决于图像格式。所以你会得到 jpeg、gif、png 等不同的结果。

我认为这个链接会很有用:

http://www.vcskicks.com/image-to-byte.php

(这取自这个答案:Convert a bitmap into a byte array

链接页面内容如下:

关于 ImageConverter 要记住的是,图像将直接转换为字节。因此,bmp 格式的图像和 png 格式的相同图像将不会具有相同的字节数组。因此,例如,如果要比较两个图像,则必须先确保它们的格式相同,然后再比较它们的字节数组。

所以我想你会注意到,字节数组的大小总是与你读入的图像文件大致相同。

于 2013-09-23T14:21:41.230 回答
0

当我使用流方法时,我得到了实际的十六进制数据。显然,图像转换器在字节转换过程中使用图像类型(默认为 PNG?)。因此字节数组大小不匹配。

谢谢你的支持,坎南

于 2013-09-25T05:19:19.843 回答
0

创建位图时,会发生一些优化。您会发现图像中可能定义了一个全局调色板,可以在整个图像中重复使用。这意味着它不会重写整个文件的颜色字节值 - 导致写入的字节更少。

谢谢,戴夫

于 2013-09-23T16:59:26.350 回答