页面无法加载?点击这里可能会修复。
Placeholder

#5919

BMP 읽기 1s 32MB

问题

그림은 점(픽셀(Pixel))의 집합으로 볼 수 있다. 따라서 그림의 크기와 모든 픽셀들의 색상 정보를 저장하면 그림 파일을 만들 수 있다.

색상 정보는 아래 표를 참조해보자.

Color

HTML / CSS Name

Hex Code

#RRGGBB

Decimal Code

(R,G,B)

 

Black

#000000

(0,0,0)

 

White

#FFFFFF

(255,255,255)

 

Red

#FF0000

(255,0,0)

 

Lime

#00FF00

(0,255,0)

 

Blue

#0000FF

(0,0,255)

 

Yellow

#FFFF00

(255,255,0)

 

Cyan / Aqua

#00FFFF

(0,255,255)

 

Magenta / Fuchsia

#FF00FF

(255,0,255)

 

Silver

#C0C0C0

(192,192,192)

 

Gray

#808080

(128,128,128)

 

Maroon

#800000

(128,0,0)

 

Olive

#808000

(128,128,0)

 

Green

#008000

(0,128,0)

 

Purple

#800080

(128,0,128)

 

Teal

#008080

(0,128,128)

 

Navy

#000080

(0,0,128)

BMP는 Bitmap의 줄임말로, 마이크로소프트에서 개발한 확장자이다. (따라서 macOS 유저들은 따라하기 힘들 수 있다.)

예를 들어, 아래와 같은 BMP파일이 있다고 하자. (4x4 크기의 그림이기에, 매우 작게 보일 수 있다.)

(다크 테마로 볼 경우 색상이 반전되어 보일 수 있음!)

이 그림은 아래의 좌측과 같은 그림으로, 4x4 픽셀 격자위에 각 모서리에 다양한 색상이 1픽셀씩 있는 모습이다.

이 BMP파일을 분석해보면, 아래와 같이 저장되어 있다. (분석 프로그램 HxD)

BMP파일은 일반적으로 54바이트가 헤더 영역으로, 14바이트 + 40바이트 = 54바이트로 되어있다.

따라서 아래쪽에는 색상 정보가 들어있음을 추측할 수 있다. (흰색은 FF FF FF)

BMP파일은 좌하단이 0,0인 좌표계이며, BGR 순서로 색상을 가지고 있다. 따라서 offset 36 위치에 FF 00 00 은 파란색을 나타낸다.

이제 헤더 일부를 살펴보자. (리틀 엔디안 방식임을 유의하라.)

기본 헤더 14바이트 정보를 보면,

첫 2바이트인 42 4D는 파일 시그니처로, 모든 BMP파일의 특징이다.

다음 4바이트인 66 00 00 00 은 파일의 사이즈를 나타낸다. -> 102바이트임을 알 수 있다.

다음 4바이트인 00 00 00 00 은 예약 공간이다. (나중을 위한 예비 공간)

다음 4바이트인 36 00 00 00 은 실제 픽셀 정보가 들어있는 공간의 시작 주소이다.

다음 인포 헤더 40바이트 정보를 보면,

첫 4바이트인 28 00 00 00 은 인포 헤더의 크기를 나타낸다. -> 40바이트임을 알 수 있다.

다음 4바이트인 04 00 00 00 은 그림의 너비를 나타낸다. -> 4픽셀임을 알 수 있다.

다음 4바이트인 04 00 00 00 은 그림의 높이를 나타낸다. -> 4픽셀임을 알 수 있다.

다음 2바이트인 01 00 은 옛날 그래픽 출력 방식 때문에 있었던 값으로 현재는 버려진 필드이다. 현재는 무조건 01 00 이 저장된다.

다음 2바이트인 18 00 은 한 픽셀당 비트 수를 나타낸다. 일반적으로 24비트이다. (0x18 = 24)

이후 내용이 궁금하다면 아래 힌트를 참고하라.

본 문제는 BMP파일을 읽어서 파일 크기와 가로 크기와 세로 크기를 출력하면 된다.

BMP 파일 경로에 유의하라. BMP 파일은 프로젝트와 같은 공간 ( codeblocks는 *.cbp 있는 공간, visual studio는 *.sln 있는 공간 ) 에 있어야 하며, 상대 경로로 작성해야 한다.

즉, FILE *fp = fopen("wa_sans.bmp","rb"); 와 같은 형식으로 읽어야 한다.

(Bitmap은 그래픽 오브젝트(묶음 데이터)다. 여기에 DDB와 DIB라는 것이 있는데, DIB만이 BMP파일로 저장할 수 있기에 우리는 DIB만 다루고 있다.)


输入

첫 줄에 BMP 파일명이 들어온다.


输出

BMP 파일을 해석한 결과를 출력한다.

출력 예를 참고하라.


示例

wa_sans.bmp
filesize : 34614 bytes
imagewidth : 256 pixels
imageheight : 45 pixels


来源

eva
需要登录才能编写代码。