Bu kişi Microsoft Paint ile "Merhaba Dünya" kodunu nasıl kodladı?


99

Bunu son birkaç gün içinde gördüm ve nasıl çalıştığını anlayamıyorum. Bahsettiğim video burada :

Bu var cevabı puan üstünü bu yığın taşması soruya gelen: Neden üç derleyici tarafından reddedilen bu program oldu?

Bu bit eşlem "Merhaba Dünya" için bir C ++ programını nasıl gösterebilir?


7
bitmap değerleri bir dosyadaki bitlerdir. Bu bitleri ASCii olarak yorumlarsanız, bir şey gösterecektir. Dikkatli bit seçimi ve bir bitmap'e bir harf veya yapı yazabilirsiniz (dosya başlığını modulo). Anlamayacak ne var? Bu, dünyanın en kötü editörü gibi aptalca bir şey.
Thomas M. DuBuisson

3
Ne 's değerinde için, orada olan en az bir tane programlama dili kaynak kodu bir görüntü olarak ifade edilir. Bu özel görüntünün işe yarayacağından değil, ama ...
Michael Madsen

1
Aradığınız ileti dizisi stackoverflow.com/questions/5508110/…
phwd

6
Bu animasyonlu GIF tarayıcımı (IE ve Chrome) öldürüyor - video göndermenin animasyonlu bir GIF'den daha iyi yolları var.
MusiGenesis

3
@MusiGenesis Oh, 2011'in sorunlarını nasıl hatırlıyorum.
Charles Clayton

Yanıtlar:


56

Bir BMP (DIB) görüntüsü, bir başlık ve ardından sıkıştırılmamış 1 renk verilerinden oluşur (24 bpp görüntüler için piksel başına 3 bayttır, ters sıra sırasına göre ve 4 baytlık satır adımıyla saklanır).

Renk verisi baytları renkleri temsil etmek için kullanılır (yani hiçbiri 2 dosya formatı tarafından "zorunlu değildir" , hepsi her pikselin renginden gelir) ve piksel renkleri ile yazılan baytlar arasında mükemmel bir 1: 1 uyuşma vardır. dosyanın içinde; böylece, mükemmel seçilmiş renkleri kullanarak, aslında dosyaya istediğiniz her şeyi yazabilirsiniz (başlık hariç).

Oluşturulan dosyayı not defterinde açtığınızda, renk verileri metin olarak gösterilecektir; BMDosya formatı tarafından zorunlu kılınan başlıktan ( metnin başlangıcına kadar olan kısım) hala net bir şekilde görebilirsiniz .

Kanımca bu video şu şekilde yapıldı: ilk önce yazar bitmap için gereken boyutu hesapladı ve basit bir desene genişleyen bir renkle doldurulmuş doğru boyutta bir DIB dosyası oluşturdu (örn. Tüm baytlar 65 => 'A'); daha sonra bu modeli videoda gösterildiği gibi "yük" koduyla değiştirir.

Bununla birlikte, her şeyi not defteri ile el yapımı yapmanın imkansız olmadığına dikkat edin - renk seçici iletişim kutusu, bir ASCII tablosu ve DIB formatının temel bilgisi ile yapılabilir, ancak çok daha yavaş ve hataya açık olacaktır.

DIB formatı hakkında daha fazla bilgi


  1. RLE sıkıştırılmış DIB'ler vardır, ancak bu durumda sıkıştırılmamış bit eşlemler kullanılır (ve yine de gerçekten nadiren kullanılırlar).
  2. Adım haricinde, 4 baytlık satırlar kullanılarak kaçınıldı.

19

1 Nisan Şakası sorularından birine atıfta bulunduğunuzu varsayıyorum.

Benim tahminim, her pikselin onun için bir ikili gösterime sahip olmasıdır. Ve kaynak koddaki her karakterin onun için bir ikili gösterimi vardır.

Programı yaratan kişi, her karaktere karşılık gelen ikili bir temsile sahip her piksel için rengi hesaplamış olmalıdır.


7
+1: sonunda baytlar bayttır. Not Defteri bunları metin karakterleri olarak yorumlarken, mspaint bunları bir bitmap'teki pikseller olarak yorumlar. Baştaki "önemsiz" metin, ek resim bilgileridir (muhtemelen çözünürlük, sürüm vb. Gibi şeyler).
Chris Schmich

6

Teorik bir bilgisayar bilimi bakış açısından, her programın bir bit eşlem olarak görüldüğünde aslında aynı şeyi yapan kaynak kodunu görmeniz için yazılabileceğini sormak ilginç olacaktır. Bu tür sonuçlarla ciddi olarak ilgileniyorsanız, örneğin Kleene'nin sabit nokta teoremi hakkında okuyun .

Görüntü olarak program, bir kod gizleme biçimi olarak da görülebilir. Özellikle pratik olduğundan değil ...

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.