DDB의 구조,출력

Programming/API 2015. 6. 22. 11:19

Win32에서 HBITMAP으로 지칭되는 비트맵 오브젝트는 DDB를 말하고 DDB만이 DC에 선택될 수 있다.

리소스 에디터에 의해서 만들어지는 비트맵 리소스들은 모두 DIB이지만 이 리소스는

LoadBitmap함수에 의해서 읽혀지면서 현재 비디오 모드와 호환되는 DDB로 변경된다.

 

DDB 포맷은 다음과 같은 구조체 하나로 표현된다.

이 구조체 자체가 DDB 포맷이다.

 

typedef struct tagBITMAP

{

LONG        bmType;

LONG        bmWidth;

LONG        bmHeight;

LONG        bmWidthBytes;

WORD        bmPlanes;

WORD        bmBitsPixel;

LPVOID        bmBits;

}BITMAP;

 

 

 

bmType : 비트맵의 타입을 지정하되 0으로 고정되어있다.

bmWidth,bmHeight : 비트맵의 폭과 높이를 픽셀단위로 지정한다.

bmWidthBytes : 한줄(Scan line)의 바이트 수 , 즉 한 행의 이미지 정보를 저장하기 위해서는

                        몇 바이트가 필요한지를 나타낸다. 비트맵은 WORD단위로 정렬되기 때문에

                        이 값은 반드시 짝수여야 한다.

bmPlanes : 색상면의 수

bmBitsPixel : 한 픽셀을 표현하기 위한 비트수

bmBits : 비트맵의 실제 데이터, 비트맵의 이미지 모양을 가지는 래스터 데이터(Raster Data)

             대한 포인터이다.이 메모리에 기억된 데이터가 어떠한가에 따라서 비트맵의 실제 모양,

             즉, 그림이 달라진다.

 

bmPlanes가 1이면 bmBitsPixel이 흑백이고 4는 16색, 8은 256색, 24면 트루컬러가 된다.

 

 

 

비트맵 출력

 

BitBlt()

- DC간 영역끼리 서로 고속복사를 해주는 함수이다.
- CreateCompatibleDC함수로 만든 메모리DC에 있는 비트맵을 화면DC로 복사해줄때 사용한다.

- 같은 기능으로 StretchBlt이 있다.

 

BOOL BitBlt(

HDc hdcDest,

int nXDest, int nYDest,

int nWidth, int nHeight,

HDC hdcSrc,

int nXSrc, int nYSrc,

DWORD dwRop

);

 

dwRop : 출력하고자 하는 비트맵의 비트와 화면에 이미 출력되어 있는 비트, 그리고 현재 DC에 선택된 브러시의 비트를 논리 조합하는 연산을 지정한다.

이 값을 SRCCOPY로 지정하면 비트맵의 이미지가 그대로 화면 DC로 전송된다.

 

 값

 연산식 

설명 

 BLACKNESS

 0

 무조건 검은색으로 칠함

 DSTINVERT

 ~D

 화면색을 반전

 MERGECOPY

 S&P

 브러시와 배트맵 색을 AND 연산

 MERGEPAINT

 ~S|D

 비트맵을 반전한 후 화면색과 OR 연산한다.

 NOTSRCCOPY

 ~S

 비트맵을 반전시킨다.

 NOTSRCERASE

 ~(S|D)

 화면색과 비트맵 색을 OR 연산한 후 반전시킨다.

 PATCOPY

 P

 현재 선택된 브러시로 칠한다.

 PATINVERT

 P∧D

 브러시와 화면색을 XOR 연산한다.

 PATPAINT

 P|~(S|D)

 NOTSRCERASE의 결과를 브러시와 OR 연산한다.

 

 SRCAND

 S&D

 비트맵과 화면색을 AND연산한다.

 SRCCOPY

 S

 비트맵을 그대로 화면으로 출력(제일 많이 쓰임)

 SRCERASE

 S&~D

 비트맵과 화면의 반전색을 AND한다.

 SRCINVERT

 S∧D

 비트맵과 화면을 XOR한다.

 SRCPAINT

 S|D

 비트맵과 화면을 OR 연산한다.

 WHITENESS

 1

 무조건 흰색으로 칠한다.

 

 

 

BOOL StretchBlt(

HDC hdcDest,

int nXOriginDest, int nYOriginDeest,

int nWidthDest, int nHeightDest,

HDC hdcSrc,

int nXOriginSrc, int nYOriginSrc,

int nWidthSrc, int nHeightSrc,

DWORD dwRop

);

 

- BitBlt()과 비슷하지만 비트맵을 축소, 확대시킬 수 있다.

 

 

 

 

 

 

 

 

'Programming > API' 카테고리의 다른 글

DIB 구조  (0) 2015.06.22
CreateFile, ReadFile, WriteFile  (0) 2015.06.22
비트맵,DDB,DIB  (0) 2015.06.21
SendMessage  (0) 2015.06.16
CALLBACK TimerProc  (0) 2015.06.10
admin