Ham ikili veriler verilen genişlik ve yükseklikte bir görüntü olarak nasıl görüntülenir?


15

Linux için ham ikili verileri görüntüleyebilecek bir program var mı?

İkili dosyalarımdaki her bayt bir pikseli temsil eder, bu yüzden söyleyebileceğim böyle bir şey varsa çok yararlı olurdu

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

ve pikselleri görüntüler.

Acaba gnuplot, bunun için kullanılabilir ...?


2
Soru mantıklı değil. Ham ikili verileri görüntülemek için, verilerin okunabilir bir biçime dönüştürülmesi gerekir. Genellikle bu form, hdbiçimlendirmek için kullanabileceğiniz onaltılıktır . Sonra bir görüntü görmek istersiniz. Bir görüntü ise, en azından formatı, genişliği, yüksekliği, renk derinliğini tanımlayan ve belki de bir renk paletine sahip bir üstbilgiye sahip bir görüntü formatında (bmp gibi) olacaktır. ekli.
psusi

@psusi Başlık daha iyi olsa da Ham piksel verileri nasıl görüntülenir , bu sorunun amacı açık ve benim için tamamen mantıklı. ("Bir programın görüntü meta verilerini belirtmeme izin vermesini istiyorum") Size arkada (veya düzenlemeden sonra) da daha anlamlı geliyor mu?
Nathan Kidd

@NathanKidd, ahh, evet .. belirli bir format kullanan bir görüntü olduğunu ancak başlıksız olduğunu biliyorsanız, sadece keyfi ikili veri olmaktan ...
psusi


Yanıtlar:


12

"Ham ikili verileri" görmek için, hex döküm komutunu hdveyahexdump

$ 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. <Başlangıç> .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

Yapılandırılmamış baytlardan oluşan herhangi bir görüntü formatı bilmiyorum - veri 8 bit RGB değerleri mi? Dosya 30000 bayt içeriyorsa 100x100 piksel için RGB veya 50x200 piksel için RGB veya 200x50 piksel için RGB veya başka bir şey mi? Bir palet var mı? Verilerin organizasyonu hakkında bir şeyler bilmek zorundasınız!

Bir görüntü olarak görüntülemek için, NetPBM yardımcı programlarını veya belki de ImageMagick'i bir resim görüntüleyici tarafından anlaşılan bir forma dönüştürmek için kullanırdım

Yukarıdaki işi yapamazsa, küçük bir Perl betiği yazmayı araştırırdım


Bunu nereden alabilirim? Az önce yum search hdFedora masaüstümde yaptım ve buna sahip değildi.
Sandra

Tamam. Pikselleri grafik olarak görmem gerek ...
Sandra

2
İkili çağrılabilir hexdump. SuSE'de util-linuxpaketin içindedir .
Turbo J

FWIW aynı zamanda hexdumpArch.
Sparhawk


10

convertImageMagick bunu yapabilir.

Örneğin, 8 bitlik 2x3 gri tonlamalı:

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

Sonra:

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

Komut açıklaması:

  • -depth 8: her rengin 8 biti vardır
  • -size 2x3+0: 2x3görüntü. +0dosyada 0 ofsetinden başlamak anlamına gelir. Meta veri üstbilgileri varsa, bunları ofsetle atlayabilirsiniz.
  • gray:f: girdi dosyası fve biçim, http://www.imagemagick.org/script/formats.php adresindegray tanımlandığı gibidir. ImageMagick genellikle uzantıdan biçimi belirlediğinden, bu garip gösterim kullanılır .

Şimdi sorun çıktıyı nasıl görüntüleyeceğiniz. Doğrudan eog:

eog out.png

görüntü çok küçük olduğu için çok iyi değil ve çok yakınlaştırırsanız eogpikselleri karıştıran bir görüntü algoritması kullanır, bu da çoğu resim için daha iyidir, ancak bizim durumumuzda değildir. İki olasılık buldum:

  • gimp out.png. Görüntü düzenleyicilerin her pikseli göstermesi gerekir.
  • convert out.png -scale 300x200 out2.png. mixels pikselleri varsayılan olarak çok benzer olduğundan, -scalebunun yerine gereklidir .-resize-resizeeog

Çıktı:

resim açıklamasını buraya girin

RGB örneği:

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

resim açıklamasını buraya girin

Ubuntu 16.04, ImageMagick 6.8.9 üzerinde test edilmiştir.


1
Başka bir örnek: RGBA biçiminde (diyelim /tmp/tex1.dat) bir dosyanız varsa , dönüştürülen görüntüyü doğrudan displayImagemagick ile 128x256 piksel görüntü olarakdisplay -depth 8 -size 128x256+0 RGBA:/tmp/tex1.dat
sdaau

Piksellerde 10 veya 12 bit varsa ne olur? -endianSeçeneği denedim ama -depth 16görüntü çok karanlık gibi görünüyor
sop

sop emin değilim 10 12 hakkında. 12 derinlik 12 ile çalışabilir? 10 10'un 4 (RGBA) veya 3 (RGB) ile bölünemediğinden kanal başına kaç bit daha belirtmeniz gerektiğini umuyorum. Bunu nasıl yapacağınızdan emin değilim.
Ciro Santilli 事件 14 中心 法轮功 六四 事件

4

Doğrudan görüntülemek istemiyorsanız, dönüştürmek yerine dönüştürme yardımcı programı bunu yapabilir:

Stdin'den okumak için, 320 x 200 piksel, 8 bit gri, 0 başlığı, PNG formatında pic.png dosyasına kaydederek.

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

1
Benim gibi yeni başlayanlar için: gray:-biçim grayve -stdin'den araçlar anlamına gelir. Böylece şu anki komut stdin'i bekliyor.
Cevabımda
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.