Comment afficher les données binaires brutes en tant qu'image avec une largeur et une hauteur données?

Existe-t-il un programme pour Linux qui peut afficher des données binaires brutes?

Chaque octet dans mes fichiers binaires représente un pixel, donc il serait très utile si quelque chose comme ça existe là où je pourrais dire

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

Et il afficherait les pixels.

Je me demande si gnuplot, peut être utilisé pour cela …?

D'accord, gnuplot peut le faire.

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

Pour voir les "données binaires brutes", j'utiliserais la commande de hexdump hexadécimal hd ou 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> .aaaa |
 00000030 61 0a 61 61 61 61 61 61 61 0a 61 61 61 61 61 61 | a.aaaaaaaaaaaaa |
 00000040 61 61 0a | aa. |
 00000043

Je ne connais aucun format d'image composé d'octets non structurés: les valeurs RVB de 8 bits sont-elles? Si le fichier contient 30000 octets est-ce que le RVB pour 100×100 pixels ou RGB pour 50×200 pixels ou RGB pour 200×50 pixels ou autre chose? Y a-t-il une palette? Vous devez savoir quelque chose sur l'organisation des données!

Pour le voir en tant qu'image, j'utiliserais les utilitaires NetPBM ou peut-être ImageMagick pour le convertir en un formulaire compris par une visionneuse d'image

Si ce qui précède ne peut pas faire le travail, j'essaierais d'écrire un petit script Perl

convert de ImageMagick peut le faire.

Par exemple, une échelle de gris 2×3 8 bits:

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

Alors:

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

Explication de la commande:

  • -depth 8 : chaque couleur a 8 bits
  • -size 2x3+0 : image 2x3 . +0 signifie commencer au décalage 0 dans le fichier. S'il y a des en-têtes de métadonnées, vous pouvez les ignorer avec le décalage.
  • gray:f : le fichier d'entrée est f et le format est gray , tel que défini à http://www.imagemagick.org/script/formats.php Cette notation étrange est utilisée car ImageMagick détermine généralement le format de l'extension, mais Ici il n'y a pas d'extension.

Le problème est maintenant de savoir comment afficher la sortie. Un eog direct:

 eog out.png 

eog pas très bon car l'image est trop petite, et si vous zoomez beaucoup, eog utilise un algorithme d'affichage qui mélange les pixels, ce qui est préférable pour la plupart des images, mais pas dans notre cas. J'ai trouvé deux possibilités:

  • gimp out.png . Les éditeurs d'images doivent afficher chaque pixel.
  • convert out.png -scale 300x200 out2.png . -scale est nécessaire au lieu de -resize , car -resize mélange les pixels comme un eog par défaut.

Sortie:

Entrez la description de l'image ici

Exemple RVB:

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

Entrez la description de l'image ici

Testé sur Ubuntu 16.04, ImageMagick 6.8.9.

Si vous ne souhaitez pas le voir directement, mais plutôt le convertir, l' utilitaire de conversion peut le faire:

Pour lire à partir de stdin, en supposant 320 x 200 pixels, 8 bits gris, en-tête de 0, sauvegardant à pic.png au format PNG.

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