convert из ImageMagick может сделать это.
Например, 8-битная 2x3 шкала серого:
printf '\x00\xFF\x88\xFF\x00\xFF' > f
Затем:
convert -depth 8 -size 3x2+0 gray:f out.png
Объяснение команды:
-depth 8: каждый цвет имеет 8 бит
-size 2x3+0: 2x3 изображения. +0 означает начало со смещения 0 в файле. Если есть заголовки метаданных, вы можете пропустить их со смещением.
gray:f: входной файл f , а формат gray , как определено на http://www.imagemagick.org/script/formats.php. Эта странная запись используется, потому что ImageMagick обычно определяет формат из расширения, но здесь нет расширения.
Теперь проблема в том, как просмотреть вывод. Прямой eog:
eog out.png
не очень хорошо, потому что изображение слишком маленькое, и при большом eog использует алгоритм отображения, который смешивает пиксели, что лучше для большинства изображений, но не в нашем случае. Я нашел две возможности:
gimp out.png . Редакторы изображений должны показывать каждый пиксель.
convert out.png -scale 300x200 out2.png . -scale необходим вместо -resize , так -resize -resize пиксели вверх очень похожи на eog по умолчанию.
Выход:

Пример RGB:
printf '\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF' > f
convert -depth 8 -size 3x1+0 rgb:f out.png

Протестировано на Ubuntu 16.04, ImageMagick 6.8.9.