순서
1. Bitmap 프로젝트를 만들고 소스작성
2. 비트맵 출력에 사용될 비트맵을 준비
3. 비트맵 리소스를 만든다.
- 이미 만들어져 있는 비트맵을 임포트(Import)
메모리 DC
윈도우즈는 비트맵을 곧바로 화 면DC로 출력하는 함수를 제공하지 않는다.
워낙 대용량이라 약간의 준비를 거친 후 출력해야 한다.
비트맵은 화면으로 직접 출력할 수 없으며 반드시 메모리 DC에 미리 준비해 놓고 사용해야 한다.
메모리DC란 화면 DC와 동일한 특성을 가지며 그 내부에 출력 표면을 가진 메모리 영역이다.
메모리DC에 먼저 그림을 그린 후 사용자 눈에 그려지는 과정은 보여주지 않고 그 결과만 화면으로 고속 복사하는 방법(더블 버퍼링)을 많이 사용한다.
비트맵도 일종의 GDI오브젝트지만 화면 DC에는 선택할 수 없으며 메모리 DC만이 비트맵을 선택할 수 있다.
메모리 DC를 만들때 필요한 함수
HDC CreateCompatibleDC(HDC hdc); //전달 인자는 화면 DC
비트맵을 읽어올 때 필요한 함수
HBITMAP LoadBitmap(HINSTANCE hInstance, LPCTSTR lpBitmapName); //두 번째 인자 bitmap ID
BitBlt(빗블릿)
DC간의 영역끼리 고속복사를 수행한다.
BOOL BitBlt(HDC hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, HDC hdcSrc, int nXSrc, int nYSrc, DWORD dwRop);
BitBlt(복사대상, 시작위치X, 시작위치Y, 복사대상가로길이, 복사대상새로길이, 복사원, 복사원위치X, 복사원위치Y, 래스터연산방법지정);
dwRop
BOOL StretchBlt(HDC hdcDest, int OriginXDest, int OriginYDest, int nWidthDest, int nHeightDest, HDC hdcSrc, int OriginXSrc, int OriginYSrc, int nWidthDest, int nHeightDest, DWORD dwRop);
StretchBlt(복사대상, 시작위치X, 시작위치Y, 복사대상가로길이, 복사대상새로길이, 복사원, 복사원위치X, 복사원위치Y, 폭, 높이, 래스터연산방법지정);
1. Bitmap 프로젝트를 만들고 소스작성
2. 비트맵 출력에 사용될 비트맵을 준비
3. 비트맵 리소스를 만든다.
- 이미 만들어져 있는 비트맵을 임포트(Import)
#include "resource.h"
LRESULT OnPaint(HWND hWnd, WPARAM wParam, LPARAM lParam)
{
HDC hdc, MemDC;
PAINTSTRUCT ps;
HBITMAP MyBitmap, OldBitmap;
hdc = BeginPaint(hWnd, &ps);
MemDC = CreateCompatibleDC(hdc);
MyBitmap = LoadBitmap(g_hInst, MAKEINTRESOURCE(IDB_BITMAP1));
OldBitmap = (HBITMAP)SelectObject(MemDC, MyBitmap);
BitBlt(hdc, 0, 0, 450, 315, MemDC, 0, 0, SRCCOPY);
SelectObject(MemDC, OldBitmap);
DeleteObject(MyBitmap);
DeleteDC(MemDC);
EndPaint(hWnd, &ps);
return 0;
}
LRESULT OnDestroy(HWND hWnd, WPARAM wParam, LPARAM lParam)
{
PostQuitMessage(0);
return 0;
}
LRESULT OnPaint(HWND hWnd, WPARAM wParam, LPARAM lParam)
{
HDC hdc, MemDC;
PAINTSTRUCT ps;
HBITMAP MyBitmap, OldBitmap;
hdc = BeginPaint(hWnd, &ps);
MemDC = CreateCompatibleDC(hdc);
MyBitmap = LoadBitmap(g_hInst, MAKEINTRESOURCE(IDB_BITMAP1));
OldBitmap = (HBITMAP)SelectObject(MemDC, MyBitmap);
BitBlt(hdc, 0, 0, 450, 315, MemDC, 0, 0, SRCCOPY);
SelectObject(MemDC, OldBitmap);
DeleteObject(MyBitmap);
DeleteDC(MemDC);
EndPaint(hWnd, &ps);
return 0;
}
LRESULT OnDestroy(HWND hWnd, WPARAM wParam, LPARAM lParam)
{
PostQuitMessage(0);
return 0;
}
메모리 DC
윈도우즈는 비트맵을 곧바로 화 면DC로 출력하는 함수를 제공하지 않는다.
워낙 대용량이라 약간의 준비를 거친 후 출력해야 한다.
비트맵은 화면으로 직접 출력할 수 없으며 반드시 메모리 DC에 미리 준비해 놓고 사용해야 한다.
메모리DC란 화면 DC와 동일한 특성을 가지며 그 내부에 출력 표면을 가진 메모리 영역이다.
메모리DC에 먼저 그림을 그린 후 사용자 눈에 그려지는 과정은 보여주지 않고 그 결과만 화면으로 고속 복사하는 방법(더블 버퍼링)을 많이 사용한다.
1. 메모리 DC에 먼저 그림을 그려둔다.
2. 복사한다.
3. 화면에 그림이 나타난다.
2. 복사한다.
3. 화면에 그림이 나타난다.
비트맵도 일종의 GDI오브젝트지만 화면 DC에는 선택할 수 없으며 메모리 DC만이 비트맵을 선택할 수 있다.
메모리 DC를 만들때 필요한 함수
HDC CreateCompatibleDC(HDC hdc); //전달 인자는 화면 DC
비트맵을 읽어올 때 필요한 함수
HBITMAP LoadBitmap(HINSTANCE hInstance, LPCTSTR lpBitmapName); //두 번째 인자 bitmap ID
BitBlt(빗블릿)
DC간의 영역끼리 고속복사를 수행한다.
BOOL BitBlt(HDC hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, HDC hdcSrc, int nXSrc, int nYSrc, DWORD dwRop);
BitBlt(복사대상, 시작위치X, 시작위치Y, 복사대상가로길이, 복사대상새로길이, 복사원, 복사원위치X, 복사원위치Y, 래스터연산방법지정);
dwRop
값 |
설 명 |
BLACKNESS |
대상영역을 검정색으로 가득 채운다. |
DSTINVERT |
화면을 반전 시킨다. |
MERGECOPY |
소스 비트맵과 대상화면을 AND연산한다. |
MERGEPAINT |
소스 비트맵과 대상화면을 OR연산한다. |
SRCCOPY |
소스 영역을 대상 영역에 복사한다. |
WHITENESS |
대상영역을 흰색으로 채운다 |
메모리 DC는 DeleteDC라는 별도의 함수를 사용하여 지운다.
CreateCompatibleDC();
DeleteDC();
StretchBlt
DC간에 비트맵을 전송하는데 확대 및 축소가 가능
BOOL StretchBlt(HDC hdcDest, int OriginXDest, int OriginYDest, int nWidthDest, int nHeightDest, HDC hdcSrc, int OriginXSrc, int OriginYSrc, int nWidthDest, int nHeightDest, DWORD dwRop);
StretchBlt(복사대상, 시작위치X, 시작위치Y, 복사대상가로길이, 복사대상새로길이, 복사원, 복사원위치X, 복사원위치Y, 폭, 높이, 래스터연산방법지정);
'API' 카테고리의 다른 글
컨트롤(버튼) (0) | 2011.09.19 |
---|---|
폰트 (0) | 2011.09.16 |
색, 브러시, 투명 오브젝트 (0) | 2011.09.09 |
TextOut 예제 (0) | 2011.08.23 |
First 예제 (0) | 2011.08.22 |