이 사람이 Microsoft Paint로 "Hello World"를 어떻게 코딩 했습니까?


99

지난 며칠 동안 이것을 보았고 어떻게 작동하는지 알 수 없습니다. 제가 이야기하는 비디오는 여기에 있습니다 .

그것은의 대답은 최고 등급 이 스택 오버플로 문제에서을 : 왜이 세 가지 컴파일러에 의해 거절이 프로그램입니까?

이 비트 맵이 "Hello World"용 C ++ 프로그램을 어떻게 표시 할 수 있습니까?


7
비트 맵 값은 파일의 비트 일뿐입니다. 해당 비트를 ASCii로 해석하면 무언가가 표시됩니다. 신중하게 비트를 선택하면 비트 맵 (파일 헤더 모듈로)에 문자 또는 구성을 쓸 수 있습니다. 이해할 수없는 것은 무엇입니까? 세계 최악의 편집자처럼 어리석은 일입니다.
Thomas M. DuBuisson 2011

3
무엇의 가치가 들어있을 것입니다 적어도 하나 개의 프로그래밍 언어 소스 코드를 이미지로 표현된다. 이 특정 이미지가 작동한다는 것은 아니지만 ...
Michael Madsen

1
찾고 있던 스레드 stackoverflow.com/questions/5508110/…
phwd

6
애니메이션 GIF가 내 브라우저 (IE 및 Chrome)를 죽이고 있습니다. 애니메이션 GIF보다 동영상을 게시하는 더 좋은 방법이 있습니다.
MusiGenesis 2011

3
@MusiGenesis 아, 2011 년의 문제를 기억하는 방법
찰스 클레이 턴을

답변:


56

BMP (DIB) 이미지는 헤더와 압축되지 않은 1 색 데이터 로 구성됩니다 (24bpp 이미지의 경우 픽셀 당 3 바이트, 역행 순서 및 4 바이트 행 스트라이드로 저장 됨).

색상 데이터에 대한 바이트는 색상을 나타내는 데 사용됩니다 (즉, 파일 형식 2에 의해 "필수"되지 않으며 모두 각 픽셀의 색상에서 나옴). 픽셀 색상과 작성된 바이트 간에는 완벽한 1 : 1 대응이 있습니다. 파일에서; 따라서 완벽하게 선택된 색상을 사용하면 실제로 파일에 원하는 모든 것을 쓸 수 있습니다 (헤더 제외).

생성 된 파일을 메모장에서 열면 색상 데이터가 텍스트로 표시됩니다. BM파일 형식에 따라 지정된 헤더 ( 텍스트 시작 부분)에서 여전히 명확하게 볼 수 있습니다 .

제 생각에이 비디오는 다음과 같은 방식으로 수행되었습니다. 먼저 작성자는 비트 맵에 필요한 크기를 계산하고 간단한 패턴으로 확장되는 색상으로 채워진 올바른 크기의 DIB 파일을 만들었습니다 (예 : 모든 바이트 65 => 'A'); 그런 다음 동영상에 표시된 것처럼 이러한 패턴을 "페이로드"코드로 대체했습니다.

그러나 메모장으로 모든 것을 수작업으로 만드는 것은 불가능하지 않습니다. 색상 선택기 대화 상자, ASCII 테이블 및 DIB 형식에 대한 기본 지식을 사용하여 수행 할 수 있지만 훨씬 느리고 오류가 발생하기 쉽습니다.

DIB 형식에 대한 추가 정보


  1. RLE 압축 DIB가 있지만이 경우 압축되지 않은 비트 맵이 사용됩니다 (어쨌든 실제로 거의 사용되지 않음).
  2. 스트라이드를 제외하고는 4 바이트의 배수 행을 사용하여 피했습니다.

19

만우절 질문 중 하나에 대한 답을 언급하고 있다고 가정합니다.

내 생각 엔 각 픽셀에는 이진 표현이 있습니다. 그리고 소스 코드의 각 문자에는 이진 표현이 있습니다.

프로그램을 만든 사람은 각 문자에 해당하는 이진 표현이있는 각 픽셀의 색상을 계산 했어야합니다.


7
+1 : 결국 바이트는 바이트입니다. 메모장은 텍스트 문자로 해석하고 mspaint는 비트 맵의 ​​픽셀로 해석합니다. 선행 "정크"텍스트는 추가 이미지 정보 (해상도, 버전 등)입니다.
Chris Schmich 2011

6

이론적 인 컴퓨터 과학의 관점에서 보면 모든 프로그램이 그러한 방식으로 작성 될 수 있는지 묻는 것이 흥미로울 것입니다. 비트 맵으로 볼 때 실제로 동일한 작업을 수행하는 소스 코드를 볼 수 있습니다. 그러한 결과에 진지하게 관심이 있다면, 예를 들어 Kleene의 고정 소수점 정리에 대해 읽어보십시오 .

이미지로서의 프로그램은 코드 난독 화의 한 형태로 볼 수도 있습니다. 특히 실용적이지 않았다 ...

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.