如何将原始二进制数据视为具有给定宽度和高度的图像?

San*_*dra 21 linux

是否存在可以显示原始二进制数据的 Linux 程序?

我的二进制文件中的每个字节都代表一个像素,因此如果我可以说这样的东西存在,那将非常有用

program_name --input=dat001.bin --width=200 --height=100
Run Code Online (Sandbox Code Playgroud)

它会显示像素。

我想知道 gnuplot 是否可以用于此...?

Red*_*ick 14

要查看“原始二进制数据”,我将使用十六进制转储命令hdhexdump

$ hd -C a.txt
00000000 61 0a 61 61 0a 61 61 61 0a 61 61 61 61 0a 61 61 |a.aa.aaa.aaaa.aa|
00000010 61 61 61 0a 62 62 62 0a 62 62 62 62 0a 62 62 62 |aaa.bbb.bbbb.bbb|
00000020 62 62 0a 3c 62 65 67 69 6e 3e 0a 61 61 61 61 61 |bb.<begin>.aaaaa|
00000030 61 0a 61 61 61 61 61 61 61 0a 61 61 61 61 61 61 |a.aaaaaaa.aaaaaa|
00000040 61 61 0a |aa.|
00000043

我不知道任何由非结构化字节组成的图像格式 - 数据是 8 位 RGB 值吗?如果文件包含 30000 字节,那么 100x100 像素的 RGB 或 50x200 像素的 RGB 还是 200x50 像素的 RGB 或其他?有调色板吗?您必须了解有关数据组织的知识!

要将其作为图像查看,我将使用NetPBM 实用程序ImageMagick将其转换为图像查看器可以理解的形式

如果以上不能完成这项工作,我会调查编写一个小的Perl 脚本

  • 二进制文件可能被称为“hexdump”。在 SuSE 上,它位于 `util-linux` 包中。 (2认同)

Cir*_*郝海东 11

convert 来自 ImageMagick

例如,8 位 2x3 灰度:

printf '\x00\xFF\x88\xFF\x00\xFF' > in.bin
Run Code Online (Sandbox Code Playgroud)

然后:

convert -depth 8 -size 3x2+0 gray:in.bin out.png
Run Code Online (Sandbox Code Playgroud)

命令解释:

  • -depth 8: 每种颜色有 8 位
  • -size 2x3+0:2x3图片。+0表示从文件中的偏移量 0 开始。如果有元数据头,你可以用偏移量跳过它们。
  • gray:in.bin:输入文件是in.bin,格式是gray,定义在http://www.imagemagick.org/script/formats.php这个奇怪的符号被使用,因为 ImageMagick 通常从扩展名确定格式,但这里没有扩展名.

如何像这个例子一样查看如此微小的输出

现在的问题是如何准确地查看如此微小的 3x2 输出。直接eog

eog out.png
Run Code Online (Sandbox Code Playgroud)

效果不是很好,因为图像太小,如果放大很多eog使用连续混合像素的显示算法,这对大多数图片更好,但对于这么小的图像则不然。

一种很好的可能性是运行:

convert out.png -scale 300x out2.png
Run Code Online (Sandbox Code Playgroud)

或直接与:

convert -depth 8 -size 3x2+0 gray:in.bin -scale 300x out.png
Run Code Online (Sandbox Code Playgroud)

-scale需要而不是-resize,因为-resizeeog默认情况下一样连续混合像素颜色。

输出:

在此处输入图片说明

另一个选项是在 Gimp 中查看它:

gimp out.png
Run Code Online (Sandbox Code Playgroud)

如果放大得足够多,像 Gimp 这样的图像编辑器必须单独显示每个像素。

RGB 示例

printf '\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF' > in.bin
convert -depth 8 -size 3x1+0 rgb:in.bin out.png
Run Code Online (Sandbox Code Playgroud)

或使用-scale使其更易于查看:

convert -depth 8 -size 3x1+0 rgb:in.bin -scale 300x out.png
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

有关的:

在 Ubuntu 16.04、ImageMagick 6.8.9 上测试。


小智 6

如果不想直接查看而是转换它,转换实用程序可以执行以下操作:

从stdin读取,假设320 x 200像素,8位灰度,标题为0,以PNG格式保存到pic.png。

convert -depth 8 -size 320x200+0 gray:- pic.png
Run Code Online (Sandbox Code Playgroud)