【发布时间】:2016-02-12 07:01:32
【问题描述】:
我是这个领域的新手;如果我没有很好地描述这个问题,请原谅。
我有一个十六进制文件,它应该包含三个图像(宽度:640,高度:333)。十六进制文件为 1.2 MB。所以如果我们稍微计算一下,我们会得到每个像素应该有 16 位的数据。
文件的部分十六进制代码如下:
90 eb 6f 14 02 02 fd fd 4e 01 80 02 00 00 00 00
90 eb 6f 14 82 82 7d 7d 4e 01 80 02 03 00 00 00
90 eb 6f 14 c2 c2 3d 3d 4e 01 80 02 00 00 8e 08
a7 33 0f d4 00 01 00 01 00 01 43 01 f8 03 0e 17
00 01 00 00 00 00 02 00 00 00 00 00 00 00 01 00
00 04 00 00 01 01 00 00 00 00 00 00 00 00 00 00
00 00 01 01 00 00 00 00 00 01 00 00 00 00 00 00
00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00
00 00 00 00 00 00 00 01 00 00 00 00 00 00 01 01
00 00 00 00 01 00 00 00 00 00 00 00 00 00 01 01
00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00
00 01 00 00 08 01 00 00 00 00 00 00 00 00 00 00
00 01 00 00 00 00 00 01 00 00 00 00 00 0a 01 00
00 00 01 00 01 00 00 00 01 00 00 00 00 00 00 00
02 00 00 01 00 00 00 01 00 00 00 00 00 00 00 01
如您所见,有一个包含 4 行内容的标题,其中 3 行内容相似。位图数据开始。重复行在文件中再重复两次。因此,我假设重复结构位于 3 个图像中的每个图像的开头。但是这些标头之间的数据是 210 KB,这意味着每像素 8 位。因此,我将每 8 位读取为一个微小的整数,并将其设置为图像相应像素的 rgb。所以我得到了3张灰度图像。文件中还有 630 KB 的数据未读。
这里是magnified version of the original image as gray(原图是彩色的)和obtained image。如您所见,有些像素(每隔一个像素)与原始像素相比完全不同,但整个图像几乎是正确的。
所以,我的问题如下: hex文件的真实结构是什么?我应该如何阅读十六进制文件? 如何获得原始彩色文件? 什么是额外的 630 KB 数据!?什么是错误的像素?!
这里还有原始图像(i.stack.imgur.com/NdBOa.png),原始图像为灰色(i.stack.imgur.com/wDUPB.png)和获得的图像(i.stack.imgur.com /lY3ib.png)。
【问题讨论】:
-
您的原始文件是 636x330 而不是您所说的 640x333 - 为什么?图像发生了什么使它像现在这样 - 这是什么程序/工具?该工具的作者没有说明文件是如何工作的吗?整个文件在哪里?
-
原始文件来自一个没有源代码的软件。我也认为它被裁剪为 636x330;但在二进制文件中它有 640x333 字节的数据。该软件没有可用的文档,我需要在 c++ 代码中做同样的事情。如果您需要,我可以附上整个文件。
-
这里是整个文件:filebin.ca/2MAr1UtKowIR
-
如果你附上整个文件,我会用它play - 错误,我的意思是“做一些非常专业的取证分析”。
-
我已将其上传至 filebin.ca/2MAr1UtKowIR。感谢你的付出。这个帖子的答案就像我所做的一样stackoverflow.com/questions/11239203/…
标签: image image-processing bitmap file-format