
최근 업무를 진행하다가 아래 코드에서 혼선이 생겼다.
xxBitmap::getRawBitmapSize() {
return m_RawBitmap->getRawBitmapLength();
}
여기서 말하는 비트맵은 무엇일까? 픽셀(색상)을 갖고 있는 지도(MAP)에 의미를 하는 것일까? 비트맵의 사전적인 의미를 찾아보면 아래와 같다.
BMP라는 불리는 파일은 비트맵 파일 헤더(FileHeader) 와 비트맵인 포해서(InfoHeader) 두개로 구성된다. BITMAPFILEHEADER의 bfSize 실제 물리적인 크기를 갖고 있고 BITMAPINFOHEADER의 biSizeImage는 widthstep(stride, scanline) * 세로 사이즈의 실제 픽셀 데이터의 크기의 정보를 갖고 있다.
* 4바이트 Align 기준으로 계산한다고 가정
픽셀당 바이트 수 = 3
가로 = 640
세로 = 480
패딩 영역 = 가로 + (가로 % 4 ? 4 - 가로 % 4 : 0)
Widthstep = 가로 * 픽셀당 바이트 수 + 패딩 영역
biSizeImage = widthstep * 세로
typedef struct tagBITMAPFILEHEADER {
WORD bfType;
DWORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits;
} BITMAPFILEHEADER, *PBITMAPFILEHEADER;

typedef struct tagBITMAPINFOHEADER {
DWORD biSize;
LONG biWidth;
LONG biHeight;
WORD biPlanes;
WORD biBitCount;
DWORD biCompression;
DWORD biSizeImage;
LONG biXPelsPerMeter;
LONG biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClrImportant;
} BITMAPINFOHEADER, *PBITMAPINFOHEADER

왜 이렇게 계산하는지에 대해서는 다음 포스팅에 해야겠다. 컨벤션 관련 포스팅이었는데 갑자기 비트맵 이야기를 하니 계속 쓰게 되네... 아무튼 다시 컨벤션 이야기로 돌아간다.

대략적인 class xxRawBitmap 과 xxBitmap 코드가 이렇게 생겼다.
class xxRawBitmap {
...
public:
int getRawBitmapLength() {
return length;
};
private:
int length; // 파일의 크기
...
};
//blah blah
class xxBitmap {
...
public:
int getRawBitmapSize() const {
return m_RawBitmap->getRawBitmapLength();
}
private:
xxRawBitmap* m_RawBitmap;
...
}
최초 설계 의도는 RawBitmapData = 원시 비트맵 데이터라는 의미로 파일이란 의미로 추측했다. 실무에서 업무를 진행하면서 내가 만든 코드 보다 이미 설계되어 있는 코드를 그대로 사용하는 경우가 많아서 그냥 관례적으로 이해하고 넘어갔다. 하지만 많은 사람들이 물어보는 질문 중 하나였다.
많은 질문과 문의가 있다면 그건 분명 문제가 있다고 판단하여 나는 네이밍을 변경하였다. 실제 파일을 비트맵으로 변환하기 전 JPEG, PNG, TIFF, GIF 등의 경우 원시 데이터이므로 해당 class 이름을 Bitmap 이란 단어를 제거하여 xxRawBitmapData -> xxRawData로 변경하였다.
데이터 자료(資料, data, 데이터, 문화어: 데타)는 문자, 숫자, 소리, 그림, 영상, 단어 등의 형태로 된 의미 단위이다. 보통 연구나 조사 등의 바탕이 되는 재료를 말하며, 자료를 의미 있게 정리하면 정보가 된다.
자료(Data) : 현실 세계에서 관찰이나 측정을 통해 수집한 단순한 사실이나 결괏값으로 가공되지 않은 상태를 말한다. 정보(Information) : 의사 결정에 도움을 줄 수 있는 유용한 형태로, 자료를 가공(처리) 해서 얻을 수 있는 결과이다.
자료와 정보의 차이를 기반으로 RawBitmap 과 Bitmap에 대해서 네이밍을 수정하였다. 자료(RawData)를 화면에 표시할 수 있도록 가공한 정보(Bitmap)로 의미를 부여했다. 모든 사람들이 같은 의견이라고 생각하지는 않는다.

인터넷이랑 책에 있는 비트맵 구조를 그대로 인용했는데... 일반적이라는 말이 모호하다. 나중에 기회 되면 BMP Version1부터 5까지 BMP의 역사를 포스팅해야겠다.
| RAII idiom (0) | 2021.05.07 |
|---|---|
| 핌플 이디엄 Pimpl idiom (0) | 2021.05.07 |
| 싱글턴 패턴 SingleTon pattern (0) | 2021.05.07 |
| 빌더 패턴 사용 이유 (0) | 2021.05.07 |
| 빌더 패턴 Build pattern (0) | 2021.05.07 |
댓글 영역