答案1
以下是 BMP 的文档:https://en.wikipedia.org/wiki/BMP_file_format#Pixel_array_.28bitmap_data.29
缩写形式为:
- 14字节BMP头(文件信息)
- 40字节DIB头(图像信息)
- 像素
您可以在 DIB 标头部分中看到两个值 5(表示像素尺寸)和一个十六进制值(18)(表示 24 位颜色(RGB))。
特别有趣的是 wiki 中的“示例 1”,它显示了类似于此处的 2x2 图像的 HEX 转储。几点说明:
- 从视觉上看,一个字节是两位数的对联(图像中的第一个字节是 42)。
- 计数从 0 开始,因此“偏移量 31”是第 32 个字节。
- 数字都是十六进制,因此十六进制 (10) = 十进制 (16)。如果您需要转换帮助,可以使用设置为“程序员模式”的 Windows 计算器。
- “字节顺序”是从低到高,因此 4 字节值“05 00 00 00”需要理解为“00 00 00 05”
- bmp 中的 RGB 三元组被反转
根据十六进制转储和文档,您的图像将每个像素存储为未压缩的 RGB 三元组。第一个像素是三元组24 1c ed
,但这是反转的,因此它是十六进制(ed1c24),这确实是红色。请注意,每行 5 个像素后都有一个00
填充。文档说这是为了“字节对齐”。
因此,要将像素从红色更改为蓝色,您可以将其中一个三元组从 更改24 1c ed
为ed 1c 24
。
至于软件,您可以使用十六进制编辑器打开文件(或副本),进行更改并保存。仅仅使用“文本编辑模式”下的文本编辑器是不够的,因为文本符号“0”与二进制数值 0 不同。
开源 Notepad++ 具有通过插件实现的十六进制编辑功能。
至于 Paint 如何制作图像这个更大的问题,嗯,程序使用文档和标准来自动化该过程。这主要是惯例问题。“图像流”(像素数据)以相似的就像您在未压缩的图像文件中看到的那样。