我正在尝试构建一个将bmp图像的大小调整为f的程序,但是在识别该程序出了什么问题时遇到了问题。我想到了使用gdb来检查正在从源图像读取并写入新图像的内容,但是当我尝试打印最终图像的内容时,它似乎与我期望的有所不同。
因此,程序最初通过称为inptr
的文件指针从第一张图像读取。来自第一个图像的前14个字节和40个字节存储在名为bf
和bi
的bitmapfileheader和bitmapinfoheader类型的变量中,它们分别是14和40个字节。更改这些结构的属性以说明最终图像大小的变化。然后通过称为outptr
将结构写入新文件后,我使用命令打印bf(在gdb中)的内容
print bf
并打印出
{bfType = 19778, bfSize = 670, bfReserved1 = 0, bfReserved2 = 0, bfOffBits = 54}
使用命令p/x bf
将其格式化为十六进制时,这里的信息相同
{bfType = 0x4d42, bfSize = 0x29e, bfReserved1 = 0x0, bfReserved2 = 0x0, bfOffBits = 0x36}
当我尝试打印新图像的内容时出现问题。我使用此命令来打印前14个字节
`x /14xh outptr`
可打印
0x603250: 0x2c84 0xfbad 0x0000 0x0000 0x4000 0xf7ff 0x7fff 0x0000
0x603260: 0x4000 0xf7ff 0x7fff 0x0000 0x4000 0xf7ff
所有字节似乎与bf
中存储的字节不同。我希望在gdb中使用x命令来打印出类似于xxd在终端中执行的操作,但是我不确定为什么outptr的内容与bf
结构不同。
这里是source code的链接,这里是bmp.h头文件。