- 이미지
- 디지털 이미지
- 디지털 이미지 종류
- 비트맵 깊게 알아보기
이미지는 사람 또는 사물 등 무언가를 눈으로 볼 수 있게 나타낸것 입니다.
디지털 이미지는 그래픽, 그림 등 시각 정보를 이진으로 나타내어 컴퓨터에서 사람이 볼 수 있게 나타낸 파일입니다. 디지털 이미지는 모든 저장 장치에 저장할 수 있습니다.
픽셀은 디지털 디스플레이 장치에 표시할 수 있는 가장 작은 단위입니다. 지금 보고 있는 화면은 모두 픽셀로 이루어져 있습니다. 그래픽 카드 및 모니터 사양에 따라 컴퓨터 디스플레이 해상도가 결정됩니다. 1280 x 768인 컴퓨터는 디스플레이 화면에 최대 98,3040픽셀을 생성합니다.
디지털 이미지를 그대로 저장하게 되면 효율성이 좋지 않아 보통 압축을 하여 저장하게 됩니다. 압축 종류는 손실 압축과 비 손실 압축이 있으며 손실 압축은 원래 상태로 되돌릴 수 없으며 비손실 압축은 원래 상태로 되돌릴 수 있습니다.
BMP는 Windows에서 장치 독립 및 응용 프로그램 독립 이미지를 저장하는 데 사용하는 표준 형식입니다. 주어진 BMP 파일에 대한 픽셀당 비트 수(1, 4, 8, 15, 24, 32 또는 64)는 파일 헤더에 지정됩니다. 픽셀당 24비트의 BMP 파일이 일반적입니다. BMP 파일은 일반적으로 압축되지 않으므로 인터넷을 통한 전송에 적합하지 않습니다.
비트맵에서 FFFFFF는 흰색, FF0000은 빨간색, 00FF00은 녹색, 0000FF는 파란색을 나타냅니다.
jpeg는 비트맵 방식의 이미지 압축 표준 중 하나입니다. 손실 압축으로 압축률을 높힐경우 이미지 상태가 안좋아지는 단점이 있습니다. 하지만 사람 눈으로 인식할 수 없는 경우가 많습니다.
jpeg는 픽셀당 24비트를 저장하므로 1600만 개 이상의 색상을 표시할 수 있습니다.
특허 문제가 있는 GIF 포맷의 문제를 해결하고 개선하기 위해서 고안되었습니다. 비손실 압축 방식으로 손상없이 원래 상태로 복원할 수 있습니다.
1987년 컴퓨서브가 발표하였으며 웹에서 널리 쓰이는 압축 방식입니다. 비손실 압축 방식을 사용합니다.
.
.
.
등 디지털 이미지를 저장하는 방법은 많이 있습니다. 이 게시글에서 디지털 이미지 종류를 자세히 다루지는 않겠습니다.
비트맵은 점 행렬로 구성된 디지털 이미지입니다. 컴퓨터에 디지털 이미지를 저장하는 데 사용하는 이미지 형식 중 하나입니다. 특히 마이크로소프트 윈도우, OS/2 운영 체제에 널리 쓰입니다.
비트맵 파일 형식에는 여러 가지가 있습니다 . 압축되지 않은 표준 비트맵 형식은 "BMP" 형식 또는 DIB(장치 독립 비트맵) 형식이라고도 합니다. 여기에는 이미지의 크기와 이미지에 포함될 수 있는 색상 수를 정의하는 헤더와 해당 색상이 있는 픽셀 목록이 포함됩니다.
위 사진은 girl.bmp 파일을 헥사값으로 변경한 이미지입니다. 파란색 배경이 헤더와 비트맵 정보를 나타냅니다.
( 위 이미지에서는 일부만 나온것이며 실제로 263,222개의 HEX값이 있습니다. )
헥사코드란?
=> 16진수
빅 인디언 방식과 리틀 인디언 방식의 지식이 필요합니다.
( 헤더는 리틀 인디언 방식을 사용 )
ex) 00 01 00 00 => 00 00 01 00
이 바이트 블록은 파일의 시작 부분에 있으며 파일을 식별하는 데 사용됩니다. 일반적인 응용 프로그램은 파일이 실제로 BMP 파일이고 손상되지 않았는지 확인하기 위해 먼저 이 블록을 읽습니다
42 4D : BM 으로 비트맵을 나타냅니다.
36 04 04 00 : Little Endian방식으로 되어있으므로 "00 04 04 36" => 263,222bytes
36 04 00 00 : 1078bytes
이 바이트 블록은 화면에 이미지를 표시하는 데 사용되는 이미지에 대한 자세한 정보를 애플리케이션에 알려줍니다.
28 00 00 00 : 40bytes
00 02 00 00 : 512
00 02 00 00 : 512
01 00 : 1
08 00 : 8
픽셀당 비트수 : 8bpp
00 00 00 00 : 0
00 00 04 00 : 262,144
00 01 00 00 : 256
00 00 00 00
10 ~ 4 내용을 보시면 시작 오프셋이 1078bytes 인것을 확인 할 수 있습니다.
1078 - (14+40) 시작 오프셋 - ( 헤더 + 정보 ) : 1024bytes 입니다.
이 1024bytes는 색상 테이블 정보입니다.
위 사진은 4바이트 RGBA32 형식으로 총 256개의 색상이 있으며 각 색상은 4바이트를 차지하여 총 256 * 4 : 1024bytes입니다.
색상표는 일반적으로 픽셀이 16비트/픽셀(16bpp) 형식(이상)일 때 사용되지 않습니다. 일반적으로 해당 비트맵 이미지 파일에는 색상표 항목이 없습니다. 그러나 Microsoft 문서에 따르면 16bpp(이상)의 경우 제한된 장치에서 최적화를 위한 색상 목록을 저장하기 위해 색상표가 표시될 수 있습니다.
1078 비트 부터 비트맵 색상 정보를 확인할 수 있습니다.
1byte
이미지 한줄에 512bytes
위 정보들을 통해 1590bytes(1078 + 512 = 1590)로 이미지 1줄을 만들 수 있다는것을 확인했습니다.
이미지의 헥사코드를 아래부터 절반 정도 제거를 하여 이미지로 나타냈습니다.
비트맵 정보 헤더의 이미지 높이는 양수이므로 파일의 비트맵 데이터 순서는 줄 순서대로 왼쪽 하단 모서리에서 오른쪽 상단 모서리까지입니다. 즉, 우리가 보는 첫 번째 픽셀은 이미지의 왼쪽 하단 모서리에 있는 데이터입니다.
이미지와 디지털 이미지가 무엇인지 알아보고 비트맵 이미지를 헥사 코드로 바꿔 BMP 헤더, 비트맵 정보(DIB 헤더), 색상 테이블을 알아 보았고 실제 이미지를 분석 해봤습니다.
techopedia - pixel
https://www.techopedia.com/definition/24012/pixel
microsoft - Types of Bitmaps
https://docs.microsoft.com/en-us/dotnet/desktop/winforms/advanced/types-of-bitmaps?view=netframeworkdesktop-4.8#:~:text=A%20bitmap%20is%20an%20array,be%20assigned%20to%20that%20pixel.
BBC - digital images
https://www.bbc.co.uk/bitesize/topics/zf2f9j6/articles/z2tgr82
techterms - Bitmap
https://techterms.com/definition/bitmap
wikipedia - BMP 파일 포맷
https://ko.wikipedia.org/wiki/BMP_%ED%8C%8C%EC%9D%BC_%ED%8F%AC%EB%A7%B7
katastros - Detailed explanation of BMP file format
https://blog.katastros.com/a?ID=00550-44115673-da75-4bdd-b18b-92f0960484e2
codepen - Hex to image
https://codepen.io/abdhass/full/jdRNdj
Hex converter
https://www.scadacore.com/tools/programming-calculators/online-hex-converter/
Window Bitmap File Loader
http://www.kalytta.com/bitmap.h