如何在 HEX 中为 BMP 图像的分辨率设置负值
Posted
技术标签:
【中文标题】如何在 HEX 中为 BMP 图像的分辨率设置负值【英文标题】:How to set an negative value to the resolution of a BMP image in HEX 【发布时间】:2016-05-21 21:39:39 【问题描述】:有人问过有关 BMP 文件的这些问题,但没有人真正解释如何将负高度值直接放入 BMP 图像的十六进制编辑器中。我的图像是 640x480,问题是(众所周知)BMP 图像是从左下侧通过每一行到顶部扫描的。这使我的图像镜像等待,因为它们被自上而下地扫描(源代码就是这样做的)。高度的正值是十六进制的 80 02 (640)。负 640 在十六进制中的负值是多少?
【问题讨论】:
了解two's complement Check the file here 这是使用 -480 宽度的 BMP 标头: 42 4D 36 B4 04 00 00 00 00 00 36 00 00 00 28 00 00 00 80 02 00 00 1F FE 00 00 01 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00,但它不起作用。将 E0 01 (480) 更改为 1F FE (-480) 不可行。 案子没有解决…… 您确定这些数字不是 16 位的吗?还是它们是 32 位的? 【参考方案1】:您需要的是仅反转 高度(不是宽度,阅读 cmets 似乎有些混乱)。这应该使 BMP 解码器从顶部/向下读取图像,而不是正常的底部/向上读取图像。
请注意,BMP 16 位和 32 位值始终使用 little endian (Intel) 字节顺序存储。
您使用的 40 字节 BMP 标头(如 0x28 00 00 00
在偏移量 14 处所见,也称为 "Windows Bitmap Info Header")使用 32 位值作为宽度/高度。
因此,作为 LE 字节顺序的 32 位值,-480
被写为0x20 FE FF FF
(在偏移量 22 处)。
作为概念证明,这里是来自BMP Suite 的g/rgb24.bmp
,在转换前后(高度分别为64
/0x40 00 00 00
和-64
/0xC0 FF FF FF
,偏移量为22):
这些都可以在 OS X 上使用 Preview 正常打开(显然是 SO/imgur,因为它们可以方便地将文件转换为 PNG)。
这是download link for the flipped file, as BMP。
【讨论】:
嗨。我没有改变宽度。只有高度。我已经尝试了 20 FE FF FF,但在我的计算机上无法使用 GIMP 或 GRAFX2 打开...我需要它来更改图像... 查看我的编辑。你能打开这些文件吗?请注意,您需要使用精确值C0 FF FF FF
来覆盖从偏移 22 到 25 的 4 个字节。
它有效...我一定犯了一些错误...谢谢。 ?? 现在我也可以用同样的方式处理其余的文件(除了那些缺少填充的文件)。谢谢??
现在我得到了 BMP 格式的所有数据文件,从上到下分别为 640x480、320x240 和 97x55 像素。缺少 190x107(填充问题)。
97x55 没有添加填充就可以工作...但是 190x107 没有它就无法工作...奇怪...以上是关于如何在 HEX 中为 BMP 图像的分辨率设置负值的主要内容,如果未能解决你的问题,请参考以下文章
如何在 netbeans 中为 JPanel 设置背景图像? [复制]
每当在 recyclerview 中为 base64 图像调用 notifydatasetchanged() 时,图像就会闪烁