Como visualizar dados binários brutos como uma imagem com largura e altura especificadas?

15

Existe um programa para o Linux que pode exibir dados binários brutos?

Cada byte em meus arquivos binários representa um pixel, então 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 ...?

    
por Sandra 08.06.2011 / 01:20

4 respostas

11

Ok, o gnuplot pode fazer isso.

link

    
por 08.06.2011 / 01:42
12

Para ver os "dados binários brutos", eu usaria o comando hex dump hd or 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

Eu não sei de nenhum formato de imagem que consista em bytes não estruturados - os valores RGB de dados de 8 bits são? Se o arquivo contiver 30000 bytes, será que RGB para 100x100 pixels ou RGB para 50x200 pixels ou RGB para 200x50 pixels ou outra coisa? 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 ImageMagick para convertê-lo em uma forma compreendida por um visualizador de imagens

Se o acima não puder fazer o trabalho, eu investigaria escrever um pequeno script Perl

    
por 08.06.2011 / 01:32
10

convert do ImageMagick pode fazê-lo.

Por exemplo, uma escala de cinza 2x3 de 8 bits:

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

Então:

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

Explicação do comando:

  • -depth 8 : cada cor tem 8 bits
  • -size 2x3+0 : 2x3 image. +0 significa iniciar 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 no link Esta 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 eog direto:

eog out.png

não é muito bom porque a imagem é muito pequena e se você aplicar muito zoom eog usa um algoritmo de exibição que mistura pixels, o que é melhor para a maioria das imagens, mas não no nosso caso. Eu encontrei duas possibilidades:

  • %código%. Os editores de imagem devem mostrar todos os pixels.
  • %código%. gimp out.png é necessário em vez de convert out.png -scale 300x200 out2.png , pois o -scale mixels é muito parecido com -resize por padrão.

Saída:

ExemplodeRGB:

printf'\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF'>fconvert-depth8-size3x1+0rgb:fout.png

Testado no Ubuntu 16.04, ImageMagick 6.8.9.

    
por 26.09.2015 / 09:54
4

Se você não quiser visualizá-lo diretamente, mas convertê-lo, o utilitário converter poderá fazer isso:

Para ler a partir de stdin, assumindo 320 x 200 pixels, cinza de 8 bits, cabeçalho de 0, salvando em pic.png no formato PNG.

convert -depth 8 -size 320x200+0 gray:- pic.png
    
por 01.10.2013 / 23:29

Tags