我正在尝试将灰度图像转换为字节数组。我使用以下代码。但是,生成的字节数组不是逻辑大小。
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);
如果我将字节重新转换为图像,则图像完好无损。有人可以解释为什么这个不匹配?
感谢 卡纳安
答案 0 :(得分:1)
返回的字节数组不是图像的原始表示,其中一个字节代表一个像素。相反,取决于图像格式。所以你会得到jpeg,gif,png等不同的结果。
我认为这个链接很有用:
http://www.vcskicks.com/image-to-byte.php
(这取自这个答案:Convert a bitmap into a byte array)
链接页面显示:
关于ImageConverter要记住的是,图像将直接转换为字节。因此,bmp格式的图像和png格式的相同图像将不具有相同的字节数组。因此,如果你想比较两个图像,你必须确保它们在比较它们的字节数组之前是第一个采用相同的格式。
所以我想你会注意到,你读入的图像文件中的字节数组总是大致相同。
答案 1 :(得分:0)
创建位图时,会发生一些优化。您会发现在图像中定义的全局调色板可以在整个图像中重复使用。这意味着它不会在整个文件中重写颜色字节值 - 导致写入的字节更少。
谢谢, 戴夫
答案 2 :(得分:0)
当我使用stream方法时,我得到实际的十六进制数据。显然,图像转换器在字节转换过程中使用图像类型(默认为PNG?)。因此字节数组大小不匹配。
感谢您的支持, 卡纳安