在没有 headers 的情况下转换原始图像

Converting raw images without headers

我有非常大的 (20000x20000+) 原始图像文件,其中每个像素由 3 个字节表示。我知道每张图片的分辨率。 示例(对于 4x4 图像):

+----------------+----------------+----------------+----------------+
|                |                |                |                |
|  R    G    B   |  R    G    B   |  R    G    B   |  R    G    B   |
| 0x00 0x01 0x02 | 0x03 0x04 0x05 | 0x06 0x07 0x08 | 0x09 0x0A 0x0B |
|                |                |                |                |
+----------------+----------------+----------------+----------------+
|                |                |                |                |
|  R    G    B   |  R    G    B   |  R    G    B   |  R    G    B   |
| 0x0C 0x0D 0x0E | 0x0F 0x10 0x11 | 0x12 0x13 0x14 | 0x15 0x16 0x17 |
|                |                |                |                |
+----------------+----------------+----------------+----------------+
|                |                |                |                |
|  R    G    B   |  R    G    B   |  R    G    B   |  R    G    B   |
| 0x18 0x19 0x1A | 0x1B 0x1C 0x1D | 0x1E 0x1F 0x20 | 0x21 0x22 0x23 |
|                |                |                |                |
+----------------+----------------+----------------+----------------+
|                |                |                |                |
|  R    G    B   |  R    G    B   |  R    G    B   |  R    G    B   |
| 0x24 0x25 0x26 | 0x27 0x28 0x29 | 0x2A 0x2B 0x2C | 0x2D 0x2E 0x2F |
|                |                |                |                |
+----------------+----------------+----------------+----------------+

如何将它们转换为 BMP 图片?

简单。在 Terminal 中使用 ImageMagick(或 “命令提示符” Windows 上的东西)。如果您的文件宽 1920 像素,高 1080 像素:

magick -size 1920x1080 -depth 8 RGB:YOURFILE output.bmp

不确定为什么有人愿意选择使用 BMP 格式。我更喜欢 PNG:

magick -size 1920x1080 -depth 8 RGB:YOURFILE output.png

如果使用 v6 ImageMagick.

,请使用 convert 代替 magick

或者,更简单(因为它不需要安装软件),制作 header 并将它们转换为 NetPBM 文件,PhotoshopGIMP,feh都可以读取:

{ printf "P6\n%d %d\n255\n" WIDTH HEIGHT ; cat YOURFILE; } > result.ppm