convert de ImageMagick
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: 2x3imagem. +0significa começar no deslocamento 0 no arquivo. Se houver cabeçalhos de metadados, você poderá ignorá-los com o deslocamento.
gray:f: o arquivo de entrada é fe o formato é gray, conforme definido em http://www.imagemagick.org/script/formats.php Essa 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 direto eog:
eog out.png
não é muito bom porque a imagem é muito pequena e, se você aumentar muito o zoom, eogusa um algoritmo de exibição que mistura pixels, o que é melhor para a maioria das fotos, mas não no nosso caso. Encontrei duas possibilidades:
gimp out.png. Os editores de imagens devem mostrar cada pixel.
convert out.png -scale 300x200 out2.png. -scaleé necessário em vez de -resize, pois -resizemistura pixels de maneira semelhante eogà padrão.
Resultado:

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

Testado no Ubuntu 16.04, ImageMagick 6.8.9.