BMP / DIB 파일 분석기
브라우저에서 .bmp와 .dib를 엽니다. 헤더 버전, 비트 심도, 행 순서, 압축, 채널 마스크, 팔레트, 바이트 배치까지 그대로 보여 줍니다.
사용법
- .bmp 또는 .dib 파일을 상자에 놓으세요. 이 탭 안에서만 읽고 업로드하지 않습니다.
- 개요부터 보세요. 실제 크기, 비트 심도, 어떤 DIB 헤더 버전인지, 행이 아래에서 위인지 위에서 아래인지가 나옵니다.
- 발견 사항을 읽으세요. 위에서 아래로 저장된 행, 픽셀 앞의 빈 공간, 알파가 아닌 네 번째 바이트, 실제와 다른 선언 크기처럼 이 파일만의 사실을 짚어 줍니다.
- 두 미리 보기를 비교하세요. 왼쪽은 이 페이지가 헤더대로 디코딩한 것이고 오른쪽은 브라우저 자체 디코더의 결과입니다. 다르다면 한쪽이 구현하지 않은 기능에 파일이 기대고 있다는 뜻입니다.
- 디코더를 디버깅할 때는 채널 마스크와 바이트 배치 표를 여세요. 마스크는 16비트 파일이 5-5-5인지 5-6-5인지 알려 주고, 배치 표는 헤더·팔레트·빈 공간·픽셀·잔여 바이트가 각각 어디서 시작하는지 보여 줍니다.
자세한 설명
펼치기접기
디코더가 실제로 해야 하는 방식 그대로 BMP를 바이트에서 읽어 냅니다. 14바이트 파일 헤더에서 선언된 파일 크기와 두 예약 워드, 그리고 픽셀 배열의 위치를 정하는 bfOffBits를 읽습니다. 팔레트와 픽셀 사이에 빈 공간이 있는 파일은 실제로 존재하며 합법이므로, 팔레트 바로 뒤에 픽셀이 있다고 가정하는 리더는 쓰레기를 읽습니다. DIB 헤더는 자기 크기로 버전을 알려 주며, 해당 버전이 정의하는 필드만 읽습니다. 12는 부호 없는 16비트 크기와 3바이트 팔레트 항목을 쓰고 압축 필드가 아예 없는 BITMAPCOREHEADER, 40은 익숙한 BITMAPINFOHEADER, 52와 56은 마스크를 헤더 안에 넣은 비공식 V2/V3, 108은 색 공간과 감마, 124는 렌더링 인텐트와 ICC 프로파일을 더합니다. biHeight가 음수면 행이 위에서 아래로 저장되어 있고 실제 높이는 절댓값입니다. 행은 4바이트 배수로 패딩되므로 행 간격과 패딩을 함께 보여 줍니다. BI_BITFIELDS에서는 각 마스크를 비트 위치와 비트 수로 풀어 줍니다. 16비트 BMP가 5-5-5인지 5-6-5인지는 오직 이 마스크만이 알려 주기 때문입니다. BI_JPEG와 BI_PNG는 픽셀 배열 자체가 다른 형식의 파일 하나이므로 스캔라인으로 읽지 않고 그렇다고 알려 줍니다. 무압축 1·4·8·16·24·32비트와 두 가지 런 렝스 인코딩은 여기서 직접 디코딩하고, 같은 바이트를 브라우저 자체 디코더에도 넘겨 나란히 비교합니다. 32비트 파일의 네 번째 바이트가 알파로 의도된 것인지는 알려 줄 수 없습니다. 명세상 평범한 BI_RGB 파일에는 알파가 없지만 대부분의 프로그램이 거기에 알파를 넣기 때문이며, 이 페이지는 그 모호함을 추측 대신 모호함 그대로 보고합니다.
자주 묻는 질문
왜 제 BMP는 위아래가 뒤집혀 나오나요?
아래에서 위로 저장하는 것이 기본이기 때문입니다. BMP는 biHeight가 음수가 아닌 한 이미지의 마지막 행을 먼저 저장하고, 음수일 때만 행이 위에서 아래로 흐르며 실제 높이는 그 절댓값이 됩니다. 거의 모든 다른 이미지 형식은 위에서 아래로 저장하므로 명세 대신 습관으로 작성한 디코더는 흔한 경우에는 뒤집힌 그림을, 드문 경우에는 올바른 그림을 만들어 냅니다. 이 페이지는 저장된 값과 부호를 따로 보여 주므로 코드를 뒤지기 전에 어떤 파일인지 먼저 알 수 있습니다.
팔레트와 픽셀 배열 사이의 빈 공간은 무엇인가요?
대개는 쓰는 쪽이 남긴 여유 공간일 뿐이며 완전히 합법입니다. 픽셀 배열의 위치는 앞의 크기를 모두 더해서가 아니라 파일 헤더의 bfOffBits로 정해지기 때문입니다. 어떤 프로그램은 픽셀 배열을 디스크 섹터에 맞추고, 어떤 프로그램은 채우지 않을 팔레트 자리를 미리 잡아 두며, 어떤 프로그램은 이전 편집이 비워 둔 공간을 그대로 남깁니다. bfOffBits를 믿지 않고 오프셋을 직접 계산하는 리더는 몇 바이트 이르거나 늦게 읽기 시작해 비스듬히 밀린 이미지를 만드는데, 그것이 전형적인 증상입니다.
32비트 BMP의 네 번째 바이트는 알파 채널인가요?
명세의 문언대로라면 평범한 BI_RGB 파일에서는 아닙니다. 그 바이트는 쓰이지 않는 패딩으로 문서화되어 있고, BI_BITFIELDS나 BI_ALPHABITFIELDS의 알파 마스크 또는 V4·V5 헤더가 알파를 지정할 때에만 진짜 알파 채널이 생깁니다. 하지만 실제로는 대부분의 프로그램이 거기에 알파를 저장하고 대부분의 리더는 그것을 무시합니다. Pillow만 해도 그런 파일을 그냥 RGB로 읽어 들입니다. 그래서 어떤 프로그램에서는 멀쩡하고 다른 프로그램에서는 검거나 보이지 않는 파일이 생기며, 바이트만으로는 판정할 수 없습니다. 이 페이지는 둘 중 어느 쪽인지 추측하지 않고 그대로 알려 줍니다.
16비트 BMP가 5-5-5인지 5-6-5인지 어떻게 알 수 있나요?
채널 마스크로만 알 수 있습니다. 둘 다 픽셀을 2바이트에 담고 둘 다 픽셀당 16비트라고 선언하며 헤더의 다른 어떤 값도 둘을 구분해 주지 않습니다. 빨강·초록·파랑 마스크가 어느 비트가 어느 채널인지 말해 주고, 초록 마스크가 한쪽에서는 5비트, 다른 쪽에서는 6비트입니다. 마스크 블록이 아예 없는 16비트 BI_RGB 파일은 기본값인 5-5-5입니다. 이 페이지는 각 마스크를 최하위 설정 비트의 위치와 연속된 비트 수로 풀어 주는데, 디코더에서 시프트와 스케일을 쓸 때 실제로 필요한 형태가 바로 그것입니다.
BI_RLE8과 BI_RLE4는 무엇이고 아직도 쓰이나요?
8비트와 4비트 팔레트 이미지를 위한 단순한 런 렝스 인코딩입니다. 바이트 쌍이 한 색의 연속이거나 이스케이프이며, 이스케이프는 줄 끝, 비트맵 끝, 그리고 커서를 x와 y만큼 건너뛰게 하고 지나친 자리를 정의되지 않은 채로 남기는 델타를 다룹니다. 플로피에 든 비트맵을 압축할 가치가 있던 시절을 위한 것이지만, 오래된 Windows 리소스나 구형 도구가 만든 파일에서 여전히 나타납니다. 여기서는 둘 다 디코딩하며 델타 이스케이프의 횟수와 그로 인해 기록되지 않은 픽셀 수를 함께 보고합니다. 리더마다 눈에 띄게 달라지는 부분이 바로 그 픽셀들이기 때문입니다.
파일이 어딘가로 업로드되나요?
아니요. 파일은 브라우저의 File API로 읽고 이 페이지의 자바스크립트가 해석하며, 미리 보기도 같은 탭의 캔버스에 그립니다. 무언가를 보낼 서버 쪽 구성 요소 자체가 없습니다. 이 종류의 도구에서는 그 점이 특히 중요합니다. 들여다보려는 비트맵은 스크린샷이거나 스캔본이거나 웹 서비스에 넘길 수 없는 자산인 경우가 많기 때문입니다. 페이지가 로드된 뒤 네트워크를 끊어도 모든 기능이 그대로 동작합니다.
관련 도구
ICO / CUR 아이콘 분석기
윈도우 .ico와 .cur 파일을 브라우저에서 열어 안에 든 크기, PNG·BMP 페이로드, 핫스팟, AND 마스크, 잘못된 항목을 확인합니다.
파일
TIFF 구조 검사기
브라우저에서 .tif를 엽니다. 바이트 순서, IFD 체인과 페이지, 모든 디렉터리 엔트리, 픽셀이 스트립인지 타일인지까지 보여 줍니다.
파일
Ogg 컨테이너 검사기
.ogg, .oga, .opus를 페이지 단위로 분석합니다. 그래뉼 위치, 세그먼트 테이블, CRC32 검증, 그리고 컨테이너가 담은 논리 스트림까지 보여줍니다.
파일
WebP 파일 검사기
.webp 파일의 RIFF 청크를 브라우저에서 훑어봅니다. 손실·무손실·확장 구분, 캔버스와 프레임 크기 비교, 애니메이션 타이밍, 알파, ICC, Exif, XMP를 보여줍니다.
파일
MP4 / ISO 베이스 미디어 파일 분석기
MP4·M4A·M4V·MOV를 브라우저에서 분석합니다. 브랜드, 패스트 스타트 여부, 박스 트리, 트랙별 코덱과 길이, iTunes 태그를 보여 줍니다.
파일
CSV 분할기 (행 단위)
큰 CSV를 행 수 기준으로 잘게 분할 — 청크마다 헤더 반복, 한 번에 모두 다운로드.
파일