How to view raw binary data as an image with given width and height?
To see the "raw binary data", I would use the hex dump command 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
I don't know of any image format that consists of unstructured bytes - is the data 8-bit RGB values? If the file contains 30000 bytes is that RGB for 100x100 pixels or RGB for 50x200 pixels or RGB for 200x50 pixels or something else? Is there a palette? You have to know something about the organisation of the data!
To view it as an image I would use the NetPBM utilities or maybe ImageMagick to convert it to a form understood by an image viewer
If the above can't do the job I'd investigate writing a small Perl script
Okay, gnuplot can do it.
http://gnuplot.sourceforge.net/demo_4.4/image.html
convert
from ImageMagick can do it.
E.g., an 8-bit 2x3 grayscale:
printf '\x00\xFF\x88\xFF\x00\xFF' > f
Then:
convert -depth 8 -size 3x2+0 gray:f out.png
Command explanation:
-depth 8
: each color has 8 bits-size 2x3+0
:2x3
image.+0
means starting at offset 0 in the file. If there are metadata headers, you can skip them with the offset.gray:f
: the input file isf
, and the format isgray
, as defined at http://www.imagemagick.org/script/formats.php This weird notation is used because ImageMagick usually determines the format from the extension, but here there is no extension.
The problem now is how to view the output. A direct eog
:
eog out.png
is not very good because the image is too small, and if you zoom in a lot eog
uses a display algorithm that mixes up pixels, which is better for most pictures, but not in our case. I found two possibilities:
gimp out.png
. Image editors must show every single pixel.convert out.png -scale 300x200 out2.png
.-scale
is needed instead of-resize
, since-resize
mixels pixels up much likeeog
by default.
Output:
RGB example:
printf '\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF' > f
convert -depth 8 -size 3x1+0 rgb:f out.png
Tested on Ubuntu 16.04, ImageMagick 6.8.9.