15

Существует ли программа для Linux, которая может отображать необработанные двоичные данные?

Каждый байт в моих двоичных файлах представляет пиксель, поэтому было бы очень полезно, если бы что-то подобное существовало, где я мог бы сказать

program_name --input=dat001.bin --width=200 --height=100

и он будет отображать пиксели.

Интересно, можно ли использовать gnuplot для этого ...?

4 ответа4

12

Чтобы увидеть "сырые двоичные данные", я бы использовал команду hex dump hd или hexdump

$ 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 байтов, это RGB для 100x100 пикселей или RGB для 50x200 пикселей или RGB для 200x50 пикселей или что-то еще? Есть ли палитра? Вы должны знать кое-что об организации данных!

Чтобы просмотреть его как изображение, я бы использовал утилиты NetPBM или, возможно, ImageMagick, чтобы преобразовать его в форму, понятную для средства просмотра изображений.

Если вышеупомянутое не может сделать работу, я исследовал бы написание маленького сценария Perl

11

Хорошо, gnuplot может это сделать.

http://gnuplot.sourceforge.net/demo_4.4/image.html

10

convert из ImageMagick может сделать это.

Например, 8-битная 2x3 шкала серого:

printf '\x00\xFF\x88\xFF\x00\xFF' > f

Затем:

convert -depth 8 -size 3x2+0 gray:f out.png

Объяснение команды:

  • -depth 8: каждый цвет имеет 8 бит
  • -size 2x3+0: 2x3 изображения. +0 означает начало со смещения 0 в файле. Если есть заголовки метаданных, вы можете пропустить их со смещением.
  • gray:f: входной файл f , а формат gray , как определено на http://www.imagemagick.org/script/formats.php. Эта странная запись используется, потому что ImageMagick обычно определяет формат из расширения, но здесь нет расширения.

Теперь проблема в том, как просмотреть вывод. Прямой eog:

eog out.png

не очень хорошо, потому что изображение слишком маленькое, и при большом eog использует алгоритм отображения, который смешивает пиксели, что лучше для большинства изображений, но не в нашем случае. Я нашел две возможности:

  • gimp out.png . Редакторы изображений должны показывать каждый пиксель.
  • convert out.png -scale 300x200 out2.png . -scale необходим вместо -resize , так -resize -resize пиксели вверх очень похожи на eog по умолчанию.

Выход:

Пример RGB:

printf '\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF' > f
convert -depth 8 -size 3x1+0 rgb:f out.png

Протестировано на Ubuntu 16.04, ImageMagick 6.8.9.

4

Если вы не хотите просматривать его напрямую, а конвертировать, утилита конвертирования может сделать это:

Для чтения из стандартного ввода, предполагая 320 x 200 пикселей, 8 бит серого, заголовок 0, сохраняя в pic.png в формате PNG.

convert -depth 8 -size 320x200+0 gray:- pic.png

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .