如何用“笔和纸”创建位图图像?

如何用“笔和纸”创建位图图像?

这是用红色表示的 5x5 位图的十六进制转储:

在此处输入图片描述

我的问题是,如何仅更改十六进制值(不使用 Paint 之类的工具)才能将位图的颜色更改为绿色(0,255,0)或任何颜色?

实际上,像 Paint 这样的工具如何将您绘制的像素转换为十六进制以保存位图?

答案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 eded 1c 24

至于软件,您可以使用十六进制编辑器打开文件(或副本),进行更改并保存。仅仅使用“文本编辑模式”下的文本编辑器是不够的,因为文本符号“0”与二进制数值 0 不同。

开源 Notepad++ 具有通过插件实现的十六进制编辑功能。

至于 Paint 如何制作图像这个更大的问题,嗯,程序使用文档和标准来自动化该过程。这主要是惯例问题。“图像流”(像素数据)以相似的就像您在未压缩的图像文件中看到的那样。

相关内容