
답변1
BMP에 대한 문서는 다음과 같습니다.https://en.wikipedia.org/wiki/BMP_file_format#Pixel_array_.28bitmap_data.29
짧은 형식은 다음과 같습니다.
- 14바이트 BMP 헤더(파일 정보)
- 40바이트 DIB 헤더(이미지 정보)
- 픽셀
DIB 헤더 섹션 내에서 픽셀 크기에 대한 두 값 5와 24비트 색상(RGB)에 대한 값 16진수(18)를 볼 수 있습니다.
특히 흥미로운 것은 여기에 있는 것과 유사한 2x2 이미지에 대한 HEX 덤프를 보여주는 Wiki의 "예제 1"입니다. 몇 가지 참고사항:
- 시각적으로 바이트는 두 자리 쌍입니다(이미지의 첫 번째 바이트는 42입니다).
- 계산은 0부터 시작하므로 "오프셋 31"은 32번째 바이트입니다.
- 숫자는 모두 HEX이므로 hex(10) = dec(16)입니다. 변환하는 데 도움이 필요한 경우 "프로그래머 모드"로 설정된 Windows 계산기를 사용할 수 있습니다.
- "바이트 순서"는 낮음에서 높음이므로 "05 00 00 00"의 4바이트 값은 "00 00 00 05"로 이해되어야 합니다.
- bmp의 RGB 삼중항이 반전되었습니다.
16진수 덤프 및 문서에 따르면 이미지는 각 픽셀을 압축되지 않은 RGB 삼중항으로 저장합니다. 첫 번째 픽셀은 삼중항 24 1c ed
이지만 이는 반대이므로 실제로는 빨간색인 hex(ed1c24)입니다. 00
5픽셀의 모든 행 뒤에는 패드 가 있습니다 . 문서에는 이것이 "바이트 정렬"을 위한 것이라고 나와 있습니다.
따라서 픽셀을 빨간색에서 파란색으로 변경하려면 세 쌍 중 하나를 에서 로 변경할 수 24 1c ed
있습니다 ed 1c 24
.
소프트웨어의 경우 Hex Editor로 파일(또는 복사본)을 열고 변경한 후 저장합니다. 단순히 "텍스트 편집 모드"에서 텍스트 편집기를 사용하는 것만으로는 충분하지 않습니다. 텍스트 기호 "0"은 이진수 값 0과 동일하지 않기 때문입니다.
오픈 소스 Notepad++에는 플러그인을 통한 16진수 편집 기능이 있습니다.
Paint가 이미지를 만드는 방법에 대한 더 큰 질문과 관련하여 프로그램은 문서와 표준을 사용하여 프로세스를 자동화합니다. 대부분 관습의 문제입니다. "이미지 스트림"(픽셀 데이터)은 메모리에 저장되고 조작됩니다.비슷한압축되지 않은 이미지 파일에서 볼 수 있는 방식입니다.