Ok, o gnuplot pode fazer isso.
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 ...?
Ok, o gnuplot pode fazer isso.
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
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:
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.
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
Tags linux