Existe um programa para Linux que possa exibir dados binários brutos?
Cada byte nos meus arquivos binários representa um pixel, por isso seria muito útil se algo assim existisse onde eu pudesse dizer
program_name --input=dat001.bin --width=200 --height=100
e exibiria os pixels.
Gostaria de saber se o gnuplot, pode ser usado para isso ...?
hd
para formatar. Então você pede para ver uma imagem. Se for uma imagem, será em um formato de imagem (como bmp) que terá no mínimo um cabeçalho que identifique o formato, a largura, a altura, a profundidade da cor e talvez também tenha uma paleta de cores em anexo.Respostas:
Para ver os "dados binários brutos", eu usaria o comando hex dump
hd
ouhexdump
Não conheço nenhum formato de imagem que consista em bytes não estruturados - os dados são valores RGB de 8 bits? Se o arquivo contiver 30000 bytes, é RGB para 100x100 pixels ou RGB para 50x200 pixels ou RGB para 200x50 pixels ou algo mais? Existe uma paleta? Você precisa saber algo sobre a organização dos dados!
Para visualizá-lo como uma imagem, eu usaria os utilitários NetPBM ou talvez o ImageMagick para convertê-lo em um formato compreendido por um visualizador de imagens
Se o acima não puder fazer o trabalho, eu investigaria a escrita de um pequeno script Perl
fonte
yum search hd
no meu desktop Fedora, e ele não o possui.hexdump
. No SuSE está noutil-linux
pacote.hexdump
em Arch.Ok, o gnuplot pode fazer isso.
http://gnuplot.sourceforge.net/demo_4.4/image.html
fonte
convert
do ImageMagick pode fazê-lo.Por exemplo, uma escala de cinza 2x3 de 8 bits:
Então:
Explicação do comando:
-depth 8
: cada cor tem 8 bits-size 2x3+0
:2x3
imagem.+0
significa começar no deslocamento 0 no arquivo. Se houver cabeçalhos de metadados, você poderá ignorá-los com o deslocamento.gray:f
: o arquivo de entrada éf
e o formato égray
, conforme definido em http://www.imagemagick.org/script/formats.php Essa notação estranha é usada porque o ImageMagick geralmente determina o formato da extensão, mas aqui não há extensão .O problema agora é como visualizar a saída. Um direto
eog
:não é muito bom porque a imagem é muito pequena e, se você aumentar muito o zoom,
eog
usa um algoritmo de exibição que mistura pixels, o que é melhor para a maioria das fotos, mas não no nosso caso. Encontrei duas possibilidades:gimp out.png
. Os editores de imagens devem mostrar cada pixel.convert out.png -scale 300x200 out2.png
.-scale
é necessário em vez de-resize
, já que-resize
mistura pixels de maneira semelhanteeog
à padrão.Resultado:
Exemplo de RGB:
Testado no Ubuntu 16.04, ImageMagick 6.8.9.
fonte
/tmp/tex1.dat
), você pode ver a imagem convertida diretamente com Imagemagick dedisplay
como a imagem de 128x256 pixels comdisplay -depth 8 -size 128x256+0 RGBA:/tmp/tex1.dat
-endian
opção, mas parece que funciona como o-depth 16
, a imagem é muito escuraSe não quiser visualizá-lo diretamente, mas convertê-lo, o utilitário de conversão pode fazer isso:
Para ler a partir do stdin, assumindo 320 x 200 pixels, cinza de 8 bits, cabeçalho 0, salvando em pic.png no formato PNG.
fonte
gray:-
significa formatogray
e-
significa stdin. Portanto, o comando atual trava aguardando stdin. Eu expliquei-lo ainda mais em minha resposta: superuser.com/a/978432/128124