화면의 일부분을 비트맵으로
페이지 정보
본문
화면에 출력된 그림의 일부분을 비트맵으로 분리시키려고 합니다. 터보 C의 경우 getimage()로 처리했는데, 비주얼 C++에서 이런 역할을 하는 API가 있는지 알고 싶습니다.
비주얼 C++의 경우 화면을 분리해 비트맵을 만드는 함수가 따로 존재하지 않습니다. 하지만 GetDC, ReleaseDC, CreateDC, DeleteDC 함수로 윈도우의 핸들을 얻을 수 있으므로 이에 관련된 장치 컨텍스트에 접근해 화면을 분리하면 됩니다.
BitBlt 함수를 사용해 화면 DC로부터 메모리에 있는 장치 컨텍스트로, 그런 다음에야 비트맵을 복사할 수 있습니다. 화면으로부터 비트맵 이미지를 캡처하거나 혹은 비트맵을 디스크에 저장하거나 출력할 때 팔레트 정보를 갖도록 하기 위해선 현재의 논리적 팔레트를 저장해야 합니다.
HDC hMemDC;
HBITMAP hBitmap;
hMemDC = CreateCompatibleDC(hDC); // hDC는 분리해 낼 화면의 hDC
hBitmap = CreateCompatibleBitmap(hMemDC, nWidth, nHeight);
// nWidth, nHeight는 비트맵의 크기
SelectObject(hMemDC, hBitmap);
BitBlt(hMemDC, 0, 0, nWidth, nHeight, hDC, SrcX, SrcY, SRCCOPY);
// SrcX, SrcY는 비트맵의 시작 위치
....... // 저장
DeleteDC(hMemDC);
DeleteObject(hBitmap); // 사용후 제거한다.
비주얼 C++의 경우 화면을 분리해 비트맵을 만드는 함수가 따로 존재하지 않습니다. 하지만 GetDC, ReleaseDC, CreateDC, DeleteDC 함수로 윈도우의 핸들을 얻을 수 있으므로 이에 관련된 장치 컨텍스트에 접근해 화면을 분리하면 됩니다.
BitBlt 함수를 사용해 화면 DC로부터 메모리에 있는 장치 컨텍스트로, 그런 다음에야 비트맵을 복사할 수 있습니다. 화면으로부터 비트맵 이미지를 캡처하거나 혹은 비트맵을 디스크에 저장하거나 출력할 때 팔레트 정보를 갖도록 하기 위해선 현재의 논리적 팔레트를 저장해야 합니다.
HDC hMemDC;
HBITMAP hBitmap;
hMemDC = CreateCompatibleDC(hDC); // hDC는 분리해 낼 화면의 hDC
hBitmap = CreateCompatibleBitmap(hMemDC, nWidth, nHeight);
// nWidth, nHeight는 비트맵의 크기
SelectObject(hMemDC, hBitmap);
BitBlt(hMemDC, 0, 0, nWidth, nHeight, hDC, SrcX, SrcY, SRCCOPY);
// SrcX, SrcY는 비트맵의 시작 위치
....... // 저장
DeleteDC(hMemDC);
DeleteObject(hBitmap); // 사용후 제거한다.
댓글목록
등록된 댓글이 없습니다.